一 使用工具
pyinstaller, 在ubuntu上安裝pyinstaller非常的簡單,直接使用下面的命令即可
pip install pyinstaller
注意:推薦大家使用python3.0及以上的python版本(好像python3.6使用pyinstaller也存在一些問題),因為使用python2.7下的pyinstaller在封裝的時候會提示缺失各種包等問題,然而直接使用python3.5下的pyinstaller進行封裝就非常的流暢。
二 打包的方法
進入到需要打包的py文件的目錄下,在命令行中運行:
pyinstaller 文件名.py(會生成三個文件夾,有用的是dist文件夾,在該文件夾下有一個和py文件同名的exe文件,就是打包生成的exe文件)
或pyinstaller -F 文件名.py(也會生成三個文件夾,有用的同樣是dist文件夾,不同的是dist文件夾下只有一個exe文件)
pyinstaller含有的一些參數(來源與https://blog.csdn.net/qq_27833589/article/details/62898130):
-F的含義為將原文件打包為exe文件,這里還有其他幾個可選參數
-D:創建一個目錄,包含exe文件,但會依賴很多文件,這是默認選項
-c:使用控制台,這也是默認選項
-w:使用窗口,無控制台
三 遇到的問題
問題描述:按照上面的方法成功打包,但是在執行exe文件時出現了一個非常奇怪的問題,就是程序好像開啟了多個進程來分別運行該程序一樣,控制台窗口可以看到的是程序正在瘋狂的不斷重復的運行,而且重復運行不是一次結束后,立馬接着執行,而是不等上次執行結束,就又開始執行了下一次。
問題查找:剛開始的時候,十分的迷,根本不知道怎么去尋找原因,后來在實驗室大佬的指導下,一步一步的排除原因,最后終於找到是因為引入的一個工具包的原因,這個包是from sklearn import preprocessing用來對數據進行歸一化。
結論:在使用pyinstaller時,不要在py文件中引用from sklearn import preprocessing包,盡量通過自己寫函數來實現相應的功能(我就是這么做的,因為歸一化還是比較好寫的)。pyinstaller 可以將tensorflow和keras進行完好的封裝,這點上不用懷疑pyinstaller的能力。
之前一直寫C++,沒有接觸過python。最近幾個月,用python寫了一些功能,發現python真的太好用了,開始迷戀於python了。