前言
將py編譯成可執行文件需要使用PyInstaller,之前給大家介紹了關于利用PyInstaller將python程序.py轉為.exe的方法,在開始本文之前推薦大家可以先看下這篇文章,本文主要給大家介紹了Pyinstaller最新踩坑實戰記錄,現在網上關于pyinstaller的問題充斥著各種copy過來copy過去的答案,這大概就是各種無腦博客爬蟲站最讓人討厭的地方。
而且這方面的問題,stackoverflow也是回答的千奇百怪。
強烈推薦官方文檔 http://pythonhosted.org/PyInstaller/usage.html#options
引言
這里記錄下我的兩個踩坑解決方法,第一個其實網上有人寫出來過,但是太容易被各種噪聲淹沒了。第二個則是摸索了一下午自己找到的解決方法。
一、PYTHON2X.DLL缺失
先聲明環境
Windows10+python2.7.11 64bit+pyqt4 64bit+pyinstaller3.2解決
網上遇見這種錯誤基本有這幾種:
其實,官方文檔里給出了一個參數
--win-private-assemblies
這個參數是指將共享的程序集變為私有程序集,這樣的話即使改變環境,編譯的程序依然只會執行私有程序集而忽視不同環境下的共享程序集。這個參數尤其適合在一臺機器上編譯完成后在各種不同環境下執行。
與之相近的還有一個參數
--win-no-prefer-redirects
這兩個參數是在比較新的pyinstaller版本中才有的選項,所以爬蟲站點copy的老博客自然不會介紹這類方法。
二、WINDOWS2003 32BIT提示程序無效
環境如下:
Windows2k3 32bit+python 2.7.11 32bit+pyqt 32bit+pyinstaller2.1解決
其實就是有一個需求是在32位的win2003上執行打包后的pyqt。
最初是安裝了最新版的一套32位python+pyqt+pyinstaller在32位的win7上編譯執行成功了,但是把已經是32位的程序放到2003上卻報錯說是無效的win32程序。一開始懷疑2003和win7的32位難道還不一樣?
結果一套最新程序在win2003上編譯完還是報了同樣的錯。
搜索無果后,偶然看到一個帖子,是說PHP5.5不支持Win2003,在運行時就會報無效的win32程序這個錯,恍然想到會不會是編譯用到的哪個組件同樣不支持Win2003了呢?
原本未打包的程序在2003上可以執行,那么多半是pyinstaller的問題,直接將pyinstaller回退到仍然在官方列表里的最老版本2.1,發現也只有2.1還支持python2.6以下的版本,打包成功不在報錯。
但是這里又有一點小問題,打包的pyqt程序點擊后沒有任何效果,這次懷疑是參數問題,測試后發現,首先,老版本的pyinstaller沒有我之前說的那兩個改變程序集的命令;其次,如果使用-w去掉了命令行框的話,pyqt也沒有辦法執行起來,因此最后只使用-F –clean兩個參數來打包,測試后文件可以執行。
其他
其實還有些小問題,但是這些問題答案都好找,就不在這里詳細講了。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。
新聞熱點
疑難解答