1. 程式人生 > >語音識別學習記錄

語音識別學習記錄

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

pyinstaller.exe -F path:demo.py

方法二:
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檔案中。

 
  1. import sys

  2. 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安裝之後,問題就解決了!