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模塊的問題;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM