python程序打包,來源於知乎(已驗證)

百度經驗方法:https://jingyan.baidu.com/article/22a299b5ec76869e19376ad9.html
 
 pandas導包問題解決方案:

修改原有的打包代碼爲:html

pyinstaller -F -w -i xxx.ico yyy.py --hidden-import=pandas._libs.tslibs.timedeltas
  • 1
  • -F 指只生成一個exe文件,不生成其餘dll文件
  • -w 不彈出命令行窗口
  • -i 設定程序圖標 ,其後面的ico文件就是程序圖標
  • yyy.py 就是要打包的程序
  • –hidden-import=pandas._libs.tslibs.timedeltas 隱藏相關模塊的引用
 
 知乎:
做者:Jerry Jho
連接:https://www.zhihu.com/question/29738031/answer/45431132
來源:知乎
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。

  • Windows 平臺
  • Python 2.7.9(Python 2最新版)

py2exe 是最好的選擇。python


1. 安裝py2exewindows


可直接到這裏下載app

py2exe - Browse /py2exe/0.6.9 at SourceForge.netui

應選擇Python對應的版本。例如咱們的Python是32位的2.7.9,則下載spa

py2exe-0.6.9.win32-py2.7.exe.net

若是你安裝的Python是64位的,則下載命令行

py2exe-0.6.9.win64-py2.7.amd64.exe3d


查看Python是32位仍是64位,只需到命令提示符下運行:code

python -c "import sys;print '%x' % sys.maxint" 

32位的Python會輸出7fffffff,64位的Python會輸出7fffffffffffffff

注意咱們關注的是Python的版本而不是Windows的版本。


通常說來,處於兼容性的考慮,應該安裝32位的Python,不然編譯好的程序將沒法在32位的Windows下運行。


2 準備你的Python程序


須要確保你的Python程序可以正常運行。

例如咱們的程序叫hello.py,裏面的內容就一句話:

print 'Hello,Python' 
<img data-rawheight="51" data-rawwidth="294" src="https://pic2.zhimg.com/50/68241bc8e6fd01845d083cf6783dd596_hd.jpg" class="content_image" width="294">

3 準備setup.py


你須要告訴py2exe轉換時所須要的設置。

在同一個目錄下新建一個文件,好比叫build.py,寫入如下代碼:

from distutils.core import setup import py2exe setup( console=['hello.py'], zipfile = None, options = {'py2exe' : { "bundle_files": 1, "dll_excludes": ["MSVCP90.dll","w9xpopen.exe"] } } ) 

build.py 包含了許多設置。包括你本身的Python程序的文件名,是否建立獨立的應用程序等。若是想把這個build.py用到其餘Python程序,只須要修改console=['hello.py'],中的'hello.py'便可。


4 生成可執行文件


在命令行下運行:

python build.py py2exe

屏幕會輸出大量的信息。若是工做正常,會以如下信息結束:

<img data-rawheight="286" data-rawwidth="727" src="https://pic3.zhimg.com/50/60d5406e40c1b7a54be3d7251ac0afb7_hd.jpg" class="origin_image zh-lightbox-thumb" width="727" data-original="https://pic3.zhimg.com/60d5406e40c1b7a54be3d7251ac0afb7_r.jpg">

當前目錄下會產生兩個目錄,dist和build。目錄build含有轉換時所須要的臨時文件;dist含有最終轉換的結果。


<img data-rawheight="66" data-rawwidth="302" src="https://pic1.zhimg.com/50/f0e6ea877ad4bd7de6fecef81c0c3408_hd.jpg" class="content_image" width="302">

能夠把dist目錄下的hello.exe拷給別人了,它不須要對方的電腦上安裝Python。


5 一點兒背景知識


僅僅是輸出'Hello Python',最終獲得的hello.exe卻有5M之巨。py2exe 的原理,簡單的說就是把一個迷你的Python和你的程序捆綁在了一塊兒。在其餘計算機上運行時,就至關於先快速‘安裝’了一個Python,只不過對方感受不到而已。


===================== 更新 =====================


6 關於Python3


py2exe 項目對於Python2和Python3發佈了互不兼容的安裝包。

對於Python3,經過easy_install或者pip在線安裝py2exe便可,或者到下面的網址下載安裝包。

https://pypi.python.org/pypi/py2exe/


對於Python3的py2exe,除了與Python2相同的build.py的方式,還有一種簡單直接的方法,適用於不須要額外配置的狀況。例如你的Python程序叫作hello.py,在命令行輸入


<Python3-Install-Path>\Scripts\build_exe hello.py -b 0 -c 

其中,<Python3-Install-Path>指你Python3的安裝目錄,選項-b 0含義爲「建立單一可執行文件」,-c的含義是「對可執行文件進行壓縮」


此時會在dist/目錄下出現hello.exe。是否是很方便?


===================== 更新 =====================


6 關於GUI應用程序的編譯封裝

6.1 wxPython
不須要額外的處理。
若是不肯意彈出console窗口的話,可在build.py裏將「console=['hello.py']」改爲「windows=['hello.py']」,即

from distutils.core import setup import py2exe setup( windows=['hello.py'], zipfile = None, options = {'py2exe' : { "bundle_files": 1, "dll_excludes": ["MSVCP90.dll","w9xpopen.exe"] } } ) 
6.2 PyQt4
build.py 須要增長sip。另外,鑑於文件較大,最好進行壓縮。示例build.py:
from distutils.core import setup import py2exe setup( windows=['hello.py'], zipfile = None, options = {'py2exe' : { "bundle_files": 1, "dll_excludes": ["MSVCP90.dll","w9xpopen.exe"], "includes": ["sip"], "compressed": 1, "optimize": 2, } } ) 
鑑於py2exe是使用掃描import的方法自動決定打包的文件,所以,下面的代碼,雖然以腳本方式能夠運行,可是編譯後會產生QtCore沒法找到的錯誤:

#!/usr/bin/python from PyQt4.QtGui import * if __name__ == '__main__': app = QApplication([]) w = QWidget() w.show() app.exec_() 
正確的作法是按照Qt自己的依賴,寫完全部所依賴的module:
#!/usr/bin/python

from PyQt4.QtCore import *
from PyQt4.QtGui import *

if __name__ == '__main__':
    app = QApplication([])
    w = QWidget()
    w.show()
    app.exec_()
相關文章
相關標籤/搜索