語音識別學習記錄
1.使用pyinstaller可以方便的實現Py檔案轉exe檔案,這裡是它的manual: http://www.pythonhosted.org/PyInstaller/
2.使用命令列:
1)首先cmd進入要轉換的py檔案所在目錄
2)執行命令:pyinstaller myscript.py 即可
3)可能你的工程包含多個py檔案,只要在命令中指明入口所在的py檔案就行
4)預設的執行,像2)中的命令,採用One Folder模式,打包後所有的檔案都放到一個資料夾中
5)可以通過“-F”選項實現打包到一個大exe檔案,即One File模式:pyinstaller -F myscript.py
6)如果是帶GUI的視窗程式,可以帶“-w”選項,將預設帶的stdout控制檯去掉了:pyinstaller -F -w myscript.py
3.除錯:
1)命令列執行時增加“-d”選項,可在允許exe檔案時,看到Pyinstaller架構執行的相關資訊,對除錯很有用
2)如果帶了“-w”選項,除錯資訊以對話方塊形式出現,啟動exe時,不斷彈出對話方塊顯示除錯資訊
3)如果沒有“-w”選項,則通過stdout輸出除錯資訊,這時需要在cmd中啟動exe檔案
4)除錯時一般採用One Folder模式
5)即便是有視窗的應用(如利用了wxPython等GUI)一般先在除錯模式下,通過stdout除錯生成的exe檔案,沒有問題再生成正式釋出exe;
6)除錯:pyinstaller -d myscript.py
7)釋出:pyinstaller -F -w myscript.py
4.除錯常見問題:
1)在-w模式下,得到了對話方塊輸出:pyi_rth_pkgres returned -1;不知道為什麼,搜尋也未果;重新打包加-d,去掉-w,控制檯中啟動生成的exe,得到除錯資訊:ImportError: The 'packaging' package is required; normally this is bundled with this package so if you get this warning, consult the packager of your distribution.
pyi_rth_pkgres returned -1
2)搜尋得到答案:http://blog.csdn.net/kongxx/article/details/51037331
開發環境
python3.6.4
pyinstaller
tensorflow
PyAudio-0.2.11
需求分析:
python指令碼如果在沒有安裝python的機器上不能執行,所以將指令碼打包成exe檔案,降低指令碼對環境的依賴性,同時執行更加迅速。
當然打包的指令碼似乎不是在所有的win平臺下都能使用,win7有一部分不能使用,我在win10能夠很好的執行。
準備:
pyinstaller(http://www.pyinstaller.org/) 首先還是去官網看支援的python版本,不然會很尷尬的
#安裝方法1:
#安裝pyinstaller和pywin32
#使用一下命令將自動安裝兩個包,在cmd用pip命令
#pip install -i https://pypi.douban.com/simple/ pyinstaller(豆瓣源)
安裝方法二:
pip install pyinstaller (會自動下載future,pywin32,pyinstaller)
如何使用Pyinstaller
方法一:
1.cmd到/python/scripts 找到pyinstaller.exe
2.輸入命令
1 |
|
方法二:
1.進入pyinstaller的解壓包,輸入命令
2."python pyinstaller.py -F path:demo.py"
從cmd最後一行輸出可查詢到生成的檔案
12468 INFO: Appending archive to EXE D:\Documents\Downloads\PyInstaller-3.2\down
load\dist\download.exe
後記:
1.程式設定自定義圖示:pyinstaller -F -i ico_path py_path
首先需要下載一張正常的ico,不能用直接修改後綴的。
下載圖片: https://www.easyicon.net
圖片改為ico: http://www.ico.la/
輸入命令 pyinstaller -F -i "demo.ico" "main.py"
2.報錯提示:
pyinstaller -F -i "demo.ico" "main.py" 命令格式一定是先圖示路徑,再程式路徑。
路徑最好為英文,沒有中文字元;指令碼名稱裡沒有特殊字元如 .
使用utf8編碼
圖示檔案必須是正常格式,不能直接更改字尾。
tuble index out of range ---》pyinstaller版本尚未支援python的版本
3.視窗程式
使用 pyinstaller -F -w -i ico_path py_path ,這樣指令碼不會彈出命令窗,前提是用了GUI庫.
4.匯入模組問題
pyinstaller -F -w -i --hidden-import queue ico_path py_path 加上選項
使用pyinstaller可以把python程式打包成exe可執行檔案,這樣就能在其他人的電腦上執行你的程式了。這是我首次使用遇到的坑和一些經驗總結。
1、pyinstaller打包exe檔案時,遞迴太深:RecursionError: maximum recursion depth exceeded。
解決方法:
第一步:使用pyi-makespec [option] name.py,生成name.spec檔案。(這裡,我的name.py是control_gui.spec)
可以參考官方文件:點選開啟連結
第二步:將以下程式碼新增到上面生成的spec檔案中。
-
import sys
-
sys.setrecursionlimit(5000)#5000這個數字可以隨便設
第三步:使用pyinstaller [option] name.spec進行打包。
2、打包成exe檔案後,點選exe檔案,提示:Failed to execute [程式名]。
這個問題用了比較久的時間去解決,我這裡出錯的主要原因是使用了tensorflow,然後對應的pandas版本不正確,才導致了錯誤,下面我會詳細說明一下。
首先,分析錯誤的步驟。建議一開始先使用-D命令對程式進行打包,這樣在生成的build資料夾中也會有一個exe檔案,點選這個exe檔案可以調出控制檯,上面會給出錯誤資訊,控制檯給出錯誤資訊的時間特別短,所以有必要進行錄屏,然後仔細觀察錯誤,以下給出我的程式中出現的錯誤。
很明顯,上面給出錯誤是:type object 'pandas._libs.tslibs.conversion._TSObject'has no attribute '_reduce_cython__'。
其中,以下兩個作者給出瞭解決方案,我是按照第二個作者的部落格修改成功的,因為我的Python版本是3.6。第三個文章是github上針對這一問題的討論,有興趣的也可以參與一下。
第一個:成功解決打包時不能import自定義的包或庫出現執行exe時No module named 缺少包;
第二個:成功解決pyinstaller打包AttributeError:type object pandas._TSObject has no attribute _reduce_cython_。
第三個:no attribute __reduce_cython__
具體說一下我的問題所在。我用的python版本是3.X是一個原因,其中一個重要的原因是我的Pandas版本是0.23.0,應該把安裝0.20.0版本。因此,我把pandas版本使用pip install pandas==0.20.0安裝之後,問題就解決了!