pyinstaller 庫的使用
:\>pip install pyinstaller
或
:\>pip3 install pyinstaller
PyInstaller 的官方網站網址為 http://www.pyinstaller.org/。PyInstaller 庫會自動將 PyInstaller 命令安裝到 Python 解釋器目錄中,與 pip 或 pip3 命令路徑相同,因此可以直接使用。使用PyInstaller 庫十分簡單,請注意,由於 PyInstaller 不支持源文件命中有英文句號(.)存在,假設 dpython.py 文件在 D:\codes 目錄中,命令如下:
:\>pyinstaller dpython.py
或
:\>pyinstaller D:\codes\dpython.py
執行完畢后,源文件所在目錄將生成 dist 和 build 兩個文件夾。其中,build 目錄是 pyinstaller 存儲臨時文件的目錄,可以安全刪除。最終的打包程序在 dist 內部的 dpython 目錄中。目錄中其他文件是可執行文件 dpython.exe 的動態鏈接庫。可以通過-F 參數對 Python 源文件生成一個獨立的可執行文件,如下:
:\>pyinstaller -F dpython.py
執行后在 dist 目錄中出現了 dpython.exe 文件,沒有任何依賴庫,執行它即可。使用 PyInstaller 庫需要注意以下問題:文件路徑中不能出現空格和英文句號(.);源文件必須是 UTF-8 編碼,暫不支持其他編碼類型。采用 IDLE編寫的源文件都保存為 UTF-8 編碼形式,可直接使用。PyInstaller 有一些常用參數,如下所示:
PyInstaller 命令不需要在 Python 源文件中增加代碼,只需要通過命令行進行打包即可。-F 參數最為常用,對於包含第三方庫的源文件,可以使用-p 添加第三方庫所在路徑。如果第三方庫由 pip 安裝且在Python 環境目錄中,則不需要使用-p 參數。
python打包發布
跟所有python小白一樣,我也遇到了python打包發布的問題!
進過2天的不斷百度谷歌,終於解決了這個蛋疼的問題;過程中遇到了一些問題,記錄下來以免遺忘!
先用了py2exe,由於項目里面需要訪問oracle數據庫,導入cx_oracle模塊,就是這個蛋疼的東西坑咯!
安裝cx_oracle的過程就不多說了 這個帖子講得很清楚:http://evil850209.iteye.com/blog/1394932
Oracle Instant Client 設置環境變量是讓python可以取到oci.dll,所以很多人把oci.dll, oraocci11.dll,oraociei11.dll都放到了Python27\Lib\site-packages目錄下面,也能解決問題;
用py2exe打包后 dist里面有一個msvcp80.dll的文件,系統版本不一樣名稱不一樣,有可能是msvcp90.dll、msvcp71.dll
這樣打包就完成了, 問題也來了, 用64位的python,其它模塊都是64位的,打包出來的64位程序在64位系統上運行沒有問題, 用32位的python(其它也是32位)打包出來的程序在windows server 2003服務器系統上,始終不能正常運行,經調試是導入cx_oracle模塊出錯,“ Loaded failed ,找不到指定的模塊” 復制各種dll進去都沒解決到;最后放棄py2exe
改用pyinstall
1、下載pyinstaller
目前pyinstaller支持的python版本為2.3-2.7,可以到http://www.pyinstaller.org/官網下載。
2、安裝
下載完成后,解壓即可。
3、pyinstaller使用方法
使用也非常的簡單,cmd下進入解壓出來的目錄,執行如下命令。
python pyinstaller.py [opts] yourprogram.py
主要選項包括:
-F, –onefile 打包成一個exe文件。 -D, –onedir 創建一個目錄,包含exe文件,但會依賴很多文件(默認選項)。 -c, –console, –nowindowed 使用控制台,無界面(默認) -w, –windowed, –noconsole 使用窗口,無控制台
更詳細的使用方法請參考下載包里的doc目錄下的Manual.html文件。
使用pyinstall的問題:
打包時出現類似這種情況:
File "C:\Python27\lib\ctypes\util.py", line 54, in find_library
fname = os.path.join(directory, name) File "C:\Python27\lib\ntpath.py", line 108, in join path += "\\" + b UnicodeDecodeError: 'ascii' codec can't decode byte 0xc1 in position 9: ordinal not in range(128)
【原因】
安裝過程需要訪問用戶文件夾:
5490 INFO: Updating manifest in C:\Users\梁鑫輝\AppData\Roaming\pyinstaller\bincache00_py27_32bit\python27.dll
如果用戶名是中文,不識別。
【解決辦法】
修改ntpath.py
,將import sys
改為:
import sys reload(sys) sys.setdefaultencoding("gbk")
問題2:manifest could not be extracted
【現象】
程序運行時出現這個錯誤:
manifest could not be extracted
【原因】
不明。
【解決辦法】
開始用
python pyinstaller.py -F test.py
打包成一個單一的文件,
換成
python pyinstaller.py -D test.py
生成一個目錄 ,這樣會把所有需要的dll都放在目錄下面;解決問題;
py2exe 和pyinstall 的對比; pyinstall會把需要的dll文件都復制過來,比較齊全;適合windows;在百度的時候看到有人說 py2exe是 用什么系統打包發布的,運行環境也最好是同樣的系統,未證實;
通過
python pyinstaller.py -D test.py 完美解決windows server 2003 無法導入cx_oracle模塊的問題;