python打包成爲exe文件

pyinstaller 庫的使用

PyInstaller是一個十分有用的第三方庫,它可以在Windows、Linux、Mac OS X 等操做系統下將 Python 源文件打包,經過對源文件打包,Python 程序能夠在沒有安裝 Python 的環境中運行,也能夠做爲一個獨立文件方便傳遞和管理。PyInstaller 須要在命令行(控制檯)下用pip 工具安裝,以下:
:\>pip install pyinstaller
 
:\>pip3 install pyinstaller

PyInstaller 的官方網站網址爲 http://www.pyinstaller.org/。PyInstaller 庫會自動將 PyInstaller 命令安裝到 Python 解釋器目錄中,與 pip 或 pip3 命令路徑相同,所以能夠直接使用。使用PyInstaller 庫十分簡單,請注意,因爲 PyInstaller 不支持源文件命中有英文句號(.)存在,假設 dpython.py 文件在 D:\codes 目錄中,命令以下:html

:\>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 有一些經常使用參數,以下所示:
-h, --help 查看幫助
-v, --version 查看 PyInstaller 版本
--clean 清理打包過程當中的臨時文件
-D, --onedir 默認值,生成 dist 目錄
-F, --onefile 在 dist 文件夾中只生成獨立的打包文件第 
-p DIR, --paths DIR 添加 Python 文件使用的第三方庫路徑
-i <.ico or .exe,ID or .icns>,--icon <.ico or .exe,ID or .icns >指定打包程序使用的圖標(icon)文件

PyInstaller 命令不須要在 Python 源文件中增長代碼,只須要經過命令行進行打包便可。-F 參數最爲經常使用,對於包含第三方庫的源文件,可使用-p 添加第三方庫所在路徑。若是第三方庫由 pip 安裝且在Python 環境目錄中,則不須要使用-p 參數。

 

 

python打包發佈

跟全部python小白同樣,我也遇到了python打包發佈的問題!python

進過2天的不斷百度谷歌,終於解決了這個蛋疼的問題;過程當中遇到了一些問題,記錄下來以避免遺忘!數據庫

先用了py2exe,因爲項目裏面須要訪問oracle數據庫,導入cx_oracle模塊,就是這個蛋疼的東西坑咯!windows

安裝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.dlloracle

這樣打包就完成了, 問題也來了, 用64位的python,其它模塊都是64位的,打包出來的64位程序在64位系統上運行沒有問題, 用32位的python(其它也是32位)打包出來的程序在windows server 2003服務器系統上,始終不能正常運行,經調試是導入cx_oracle模塊出錯,「 Loaded failed ,找不到指定的模塊」  複製各類dll進去都沒解決到;最後放棄py2exe工具

 

改用pyinstallpost

 

一、下載pyinstaller網站

目前pyinstaller支持的python版本爲2.3-2.7,能夠到http://www.pyinstaller.org/官網下載。

二、安裝

下載完成後,解壓便可。

三、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模塊的問題;
相關文章
相關標籤/搜索