打包
例子使用
pachonggui.py
- 正常執(zhí)行一遍
pyinstaller -Fw pachonggui.py
- 給腳本加一行代碼
import PyQt5.sip
然后再執(zhí)行同樣的命令
pyinstaller -Fw pachonggui.py
- 刪掉
import PyQt5.sip,可以繼續(xù)寫(xiě)代碼了。如果要打包,從1開(kāi)始
出現(xiàn)failed to execute script的排查方法
法一:
命令執(zhí)行完畢之后 build\pachonggui\warnpachonggui.txt,上面會(huì)記載著錯(cuò)誤
法二:
# 使用完下面這條指令之后,打開(kāi)exe,提示failed to execute script
pyinstaller -Fw pachonggui.py
# 然后執(zhí)行下面這條執(zhí)行,會(huì)在list下生成一個(gè)目錄,進(jìn)入該目錄,用**命令行**執(zhí)行該exe,就會(huì)看到錯(cuò)誤了
pyinstaller -D pachonggui.py
pyinstaller打包使用pyqt5模塊的時(shí)候,在win平臺(tái)下,由于pyinstaller無(wú)法準(zhǔn)確獲取QT動(dòng)態(tài)庫(kù)文件路徑,會(huì)報(bào)錯(cuò)導(dǎo)致無(wú)法打開(kāi)運(yùn)行程序,并提示錯(cuò)誤信息pyinstaller failed to execute script pyi_rth_qt5plugins此時(shí)我們需要在打包的時(shí)候直接告訴pyinstaller到哪里去找,這個(gè)路徑分隔符需要是unix形式:
pyinstaller --paths C:/****/Python/Python35-32/Lib/site-packages/PyQt5/Qt/bin -F -w ****.py
pyqt5打包問(wèn)題經(jīng)過(guò)
這里用到的文件是
pachonggui.py,里面使用了pyqt5 的庫(kù)
安裝好pyinstaller后,先使用下面的命令對(duì)腳本進(jìn)行打包
pyinstaller.exe -Fw .\pachonggui.py

執(zhí)行完畢,生成兩個(gè)目錄

exe文件在dist目錄下
雙擊運(yùn)行出現(xiàn)Failed to execute script pachonggui錯(cuò)誤

先去build目錄那里,找到warn***.txt文件,里面會(huì)記錄一些錯(cuò)誤

這里可以看到,pyqt5的庫(kù)沒(méi)有找到
分析:正常來(lái)說(shuō),如果pyinstaller是pip3安裝好的,那么pyqt5應(yīng)該也在同一個(gè)目錄下,應(yīng)該不會(huì)出現(xiàn)找不到路徑的情況.所以說(shuō),有兩種情況,一個(gè)是pyinstaller錯(cuò)了,一個(gè)是pyqt5錯(cuò)了,這里我先指定pyqt5的路徑讓它試試
找到python3的安裝路徑,我的是如下

然后使用--path 指定庫(kù)目錄,有一點(diǎn)需要注意:這里用的是/作為目錄分隔符,而不是\
pyinstaller.exe --path E:/Python/Python36-32/Lib/site-packages/PyQt5/Qt/bin -Fw .\pachonggui.
py
重新打包之后,再次運(yùn)行,報(bào)同樣的錯(cuò)誤,看build目錄下的warn***.txt文件,還是同樣的,沒(méi)有找到PyQt5的庫(kù)
因?yàn)楸救税惭b了python2.7和python3.6,但是我只給python2.7配置了環(huán)境變量,所以說(shuō),命令行那里的pyinstaller是python27目錄下的,而不是python36-32目錄下的,所以說(shuō),接下來(lái),我命令提示符那里指定使用python36-32下的pyinstaller試試

執(zhí)行打包命令之后,看到命令提示符,多了一些東西sip not found,不管它先,先記下來(lái),然后繼續(xù)運(yùn)行一下exe

沒(méi)錯(cuò),還是這個(gè)錯(cuò)誤... ...
看一下warn***.txt

發(fā)現(xiàn)pyqt5已經(jīng)成功導(dǎo)入了,說(shuō)明之前的錯(cuò)誤原因真是因?yàn)檎{(diào)用了python27的pyinstaller,指定使用python36-32下的pyinstaller就沒(méi)毛病了
這時(shí)候的warn***.txt是一大堆的看不懂的東西... ...怎么辦?
沒(méi)關(guān)系,還有辦法,使用-D指令,將這個(gè)exe弄成一個(gè)目錄,然后使用命令行去運(yùn)行新目錄下的exe,然后你應(yīng)該會(huì)看到報(bào)錯(cuò)誤了
E:\Python\Python36-32\Scripts\pyinstaller.exe -D .\pachonggui.py

這時(shí)候dist目錄下會(huì)多一個(gè)目錄pachonggui

然后,在這里,我需要使用命令提示符去運(yùn)行這個(gè)exe

結(jié)果如下:

... ...PyQt5.sip是什么東東???我代碼里面沒(méi)有用到啊!!!~~~
在這種情況下,我決定,手動(dòng)在代碼里面加入它,然后再執(zhí)行一次打包命令


不明白為什么提示sip not found還在,但是,這時(shí)候,exe已經(jīng)可以運(yùn)行,沒(méi)有bug了
sublime Text 3不顯示pyqt
去該目錄下 C:\Users\13612\AppData\Roaming\Sublime Text 3\Packages\User,修改python3.sublime-build如下,增加一個(gè)shell字段即可
{
"cmd": ["D:\\Program Files (x86)\\Python36-32\\python.exe", "-u", "$file"],
"file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
"selector": "source.python",
"shell":"true",
}