Python程序打包


一、為什么要對Python程序打包?

當手頭Python腳本的運行環境要求不同,時間又緊急,

處理數據時又要臨時搭建環境,很是麻煩

如果將Python腳本打包成可執行文件后會方便許多

也不用考慮運行環境的差異,隨時隨地運行

二、將Python程序打包的方法

我使用的是Python3.6 32位,windows8x64系統

這里直接推薦使用PyInstaller進行打包,至於為什么不用py2exe后面會說

1.安裝PyInstaller

首先你要有pip安裝工具,一般2.7.9以上或者3.4以上版本都內置了pip工具。假如你沒有,那么你可以參照https://www.cnblogs.com/limit1/p/8350344.html(windows系統)

http://www.runoob.com/w3cnote/python-pip-install-usage.html(Linux系統)

安裝好pip,打開cmd,輸入:

pip install pyinstaller

等待下載和安裝完成即可。

2.對Python程序進行打包

先要在命令行進入到打包目標目錄,並輸入:

pyinstaller -F test_demo.py

這里-F是指生成.exe文件,詳細內容https://blog.csdn.net/leida_wt/article/details/78698674

這里假如你使用的是Python3.6,那么恭喜,你會遇到這個錯誤

 

這是因為PyInstaller目前還不支持Python3.6 ,那么我們應該怎么辦呢?

我們需要到GitHub上下載改進版,地址https://github.com/pyinstaller/pyinstaller

下載解壓后將文件夾PyInstaller(沒有的話將pyinstaller-develop文件夾更名為PyInstaller)

復制到

C:\Users\XXX\AppData\Local\Programs\Python\Python36\Lib\site-packages(注意每個人路徑略有不同)
這次再運行就會發現不再報錯了

這時候你會發現打包目錄里多了兩個文件夾build和dist,那個dist文件夾里就是你想要的.exe文件了

點擊運行就可以啦~~

另外要提一下,對於用到了多線程的Python程序需要單獨注意,PyInstaller有很多線程的問題,打包后雙擊exe程序運行時,程序會不停的啟動進程,但是並沒有真正執行進程(詳見https://blog.csdn.net/t1014336028/article/details/83018987)

按照網上提到的辦法,在  if __name__ == '__main__': 下面加一行代碼:multiprocessing.freeze_support(),再打包運行.exe文件,就可以跑起來了。

想了解更多有關PyInstaller的內容可以看這位大佬的博客http://ju.outofmemory.cn/entry/137370,還有針對PyInstaller打包的其他問題的解決辦法,非常全面,極力推薦

三、為什么不用py2exe

假如你使用的是py2exe,並已安裝完成,而且運行環境是Python3.6。

那么你仍會遇到這個錯誤 IndexError: tuple index out of range

官方文檔表示對Python3.6完全不支持

The bytecode often changes in small ways from version to version that could break even Python 3.5
(given only 3.3 and 3.4 support is claimed explicitly),
but 3.6 is 100% guaranteed to fail.
100%失敗。。。2333而且暫時沒有解決,所以還是選擇了PyInstaller
 
 
[PS:既然PyInstaller已經有了改進版,為什么不直接更新到官網呢,莫非3.6特性專屬2333]
 


免責聲明!

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



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