使用Pyinstaller的最新踩坑實(shí)戰(zhàn)記錄
前言
將py編譯成可執(zhí)行文件需要使用PyInstaller,之前給大家介紹了關(guān)于利用PyInstaller將python程序.py轉(zhuǎn)為.exe的方法,在開始本文之前推薦大家可以先看下這篇文章,本文主要給大家介紹了Pyinstaller最新踩坑實(shí)戰(zhàn)記錄,現(xiàn)在網(wǎng)上關(guān)于pyinstaller的問題充斥著各種copy過來copy過去的答案,這大概就是各種無腦博客爬蟲站最讓人討厭的地方。
而且這方面的問題,stackoverflow也是回答的千奇百怪。
強(qiáng)烈推薦官方文檔 http://pythonhosted.org/PyInstaller/usage.html#options
引言
這里記錄下我的兩個踩坑解決方法,第一個其實(shí)網(wǎng)上有人寫出來過,但是太容易被各種噪聲淹沒了。第二個則是摸索了一下午自己找到的解決方法。
一、PYTHON2X.DLL缺失
先聲明環(huán)境
Windows10+python2.7.11 64bit+pyqt4 64bit+pyinstaller3.2解決
網(wǎng)上遇見這種錯誤基本有這幾種:
- 手動尋找.dll文件并移到對應(yīng)文件夾下,網(wǎng)上被流傳最廣的做法,我測試后無效
- 修改SPEC文件,添加各種路徑,這種手動添加路徑的方法也著實(shí)令人頭疼
- 編譯時,使用-path參數(shù)等,也是需要手動添加路徑
其實(shí),官方文檔里給出了一個參數(shù)
--win-private-assemblies
這個參數(shù)是指將共享的程序集變?yōu)樗接谐绦蚣?,這樣的話即使改變環(huán)境,編譯的程序依然只會執(zhí)行私有程序集而忽視不同環(huán)境下的共享程序集。這個參數(shù)尤其適合在一臺機(jī)器上編譯完成后在各種不同環(huán)境下執(zhí)行。
與之相近的還有一個參數(shù)
--win-no-prefer-redirects
這兩個參數(shù)是在比較新的pyinstaller版本中才有的選項(xiàng),所以爬蟲站點(diǎn)copy的老博客自然不會介紹這類方法。
二、WINDOWS2003 32BIT提示程序無效
環(huán)境如下:
Windows2k3 32bit+python 2.7.11 32bit+pyqt 32bit+pyinstaller2.1解決
其實(shí)就是有一個需求是在32位的win2003上執(zhí)行打包后的pyqt。
最初是安裝了最新版的一套32位python+pyqt+pyinstaller在32位的win7上編譯執(zhí)行成功了,但是把已經(jīng)是32位的程序放到2003上卻報(bào)錯說是無效的win32程序。一開始懷疑2003和win7的32位難道還不一樣?
結(jié)果一套最新程序在win2003上編譯完還是報(bào)了同樣的錯。
搜索無果后,偶然看到一個帖子,是說PHP5.5不支持Win2003,在運(yùn)行時就會報(bào)無效的win32程序這個錯,恍然想到會不會是編譯用到的哪個組件同樣不支持Win2003了呢?
原本未打包的程序在2003上可以執(zhí)行,那么多半是pyinstaller的問題,直接將pyinstaller回退到仍然在官方列表里的最老版本2.1,發(fā)現(xiàn)也只有2.1還支持python2.6以下的版本,打包成功不在報(bào)錯。
但是這里又有一點(diǎn)小問題,打包的pyqt程序點(diǎn)擊后沒有任何效果,這次懷疑是參數(shù)問題,測試后發(fā)現(xiàn),首先,老版本的pyinstaller沒有我之前說的那兩個改變程序集的命令;其次,如果使用-w去掉了命令行框的話,pyqt也沒有辦法執(zhí)行起來,因此最后只使用-F –clean兩個參數(shù)來打包,測試后文件可以執(zhí)行。
其他
其實(shí)還有些小問題,但是這些問題答案都好找,就不在這里詳細(xì)講了。
- pywin32官網(wǎng)上很好下到對應(yīng)版本
- 直接的pyqt安裝包官網(wǎng)不再提供了,可以去sourceforge下到
- 編譯的時候報(bào)VC的錯,安裝Microsoft Visual C++ 20xx Redistributable Package,注意32位和64位
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
- 在Pycharm中將pyinstaller加入External Tools的方法
- 解決pyinstaller打包pyqt5的問題
- 解決pyinstaller打包exe文件出現(xiàn)命令窗口一閃而過的問題
- Python打包方法Pyinstaller的使用
- 用PyInstaller把Python代碼打包成單個獨(dú)立的exe可執(zhí)行文件
- 使用PyInstaller將python轉(zhuǎn)成可執(zhí)行文件exe筆記
- python學(xué)習(xí)筆記--將python源文件打包成exe文件(pyinstaller)
- 利用pyinstaller將py文件打包為exe的方法
- Pyinstaller將py打包成exe的實(shí)例
- Pyinstaller打包.py生成.exe的方法和報(bào)錯總結(jié)
相關(guān)文章
Python統(tǒng)計(jì)字符內(nèi)容的占比的實(shí)現(xiàn)
本文介紹了如何使用Python統(tǒng)計(jì)字符占比,包括字符串中字母、數(shù)字、空格等字符的占比,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08TensorFlow2基本操作之合并分割與統(tǒng)計(jì)
這篇文章主要介紹了TensorFlow2基本操作之合并分割與統(tǒng)計(jì),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-09-09windows10 pycharm下安裝pyltp庫和加載模型實(shí)現(xiàn)語義角色標(biāo)注的示例代碼
這篇文章主要介紹了windows10 pycharm下安裝pyltp庫和加載模型實(shí)現(xiàn)語義角色標(biāo)注,本文通過圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-05-05Python web框架fastapi中間件的使用及CORS跨域問題
fastapi "中間件"是一個函數(shù),它在每個請求被特定的路徑操作處理之前,以及在每個響應(yīng)之后工作,它接收你的應(yīng)用程序的每一個請求,下面通過本文給大家介紹Python web框架fastapi中間件的使用及CORS跨域問題,感興趣的朋友一起看看吧2024-03-03typing.Dict和Dict的區(qū)別及它們在Python中的用途小結(jié)
當(dāng)在 Python 函數(shù)中聲明一個 dictionary 作為參數(shù)時,我們一般會把 key 和 value 的數(shù)據(jù)類型聲明為全局變量,而不是局部變量。,這篇文章主要介紹了typing.Dict和Dict的區(qū)別及它們在Python中的用途小結(jié),需要的朋友可以參考下2023-06-06聊聊python中令人迷惑的duplicated和drop_duplicates()用法
這篇文章主要介紹了聊聊python中令人迷惑的duplicated和drop_duplicates()用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-05-05