Python3.5+PyQt5下使用pyinstaller將.py打包成.exe所遇到的坑

Python3.5+PyQt5下使用pyinstaller將.py打包成.exe所遇到的坑

我們使用PyQt開發出來GUI了,很重要的一步就是將它打包成可執行文件,便於他人的使用,今天就配置一下在windows下打包windows下的可執行文件(.exe文件)。

先看一下我使用的電腦的系統屬性:

Python3.5+PyQt5下使用pyinstaller將.py打包成.exe所遇到的坑

1.安裝pywin

我是直接在官網上下載的,鏈接地址(64位):

https://sourceforge.net/projects/pywin32/files/pywin32/Build%20220/pywin32-220.win-amd64-py3.5.exe/download?use_mirror=jaist

其它位數的版本可以在這下載:

https://sourceforge.net/projects/pywin32/files/

下載完成後直接雙擊該文件,一直點擊下一步直到安裝完成。安裝路徑選擇你pyqt的安裝路徑就好了。這個沒有啥問題的。我的路徑對於關係是這樣的:

Python3.5+PyQt5下使用pyinstaller將.py打包成.exe所遇到的坑

2.安裝pyinstaller

方法一:使用pip安裝的(不建議使用)

  • pip install pyinstaller

報了一個小問題:

Python3.5+PyQt5下使用pyinstaller將.py打包成.exe所遇到的坑

那就升級一下pip,

Python3.5+PyQt5下使用pyinstaller將.py打包成.exe所遇到的坑

繼續安裝

Python3.5+PyQt5下使用pyinstaller將.py打包成.exe所遇到的坑

Python3.5+PyQt5下使用pyinstaller將.py打包成.exe所遇到的坑

方法二:源碼安裝

直接去gitHub上下載源碼,注意找合適的版本。我用的是3.3.1。然後cd到該目錄下,

  • python setup.py install

安裝好了如圖:

Python3.5+PyQt5下使用pyinstaller將.py打包成.exe所遇到的坑

至此,這個就安裝的差不多了。

3.使用pyinstaller打包文件

  • cd 到你的項目文件裡

  • pyinstaller -[opts] xxx.py

這個地方只需要打包你的主文件就好了,至於你這個文件import了多少個其它其它文件,這個沒有關係的。

可選的幾個簡答的opts有:

  •   -F, –onefile 打包成一個exe文件。

  •   -D, –onedir 創建一個目錄,包含exe文件,但會依賴很多文件(默認選項)。

  •   -c, –console, –nowindowed 使用控制檯,無界面(默認)

  •   -w, –windowed, –noconsole 使用窗口,無控制檯

  • -i ,image.ico -i表示圖標,圖標格式是.ico

打包一下我自己的py文件:

  • pyinstaller -w -F serial_gui_main.py

Python3.5+PyQt5下使用pyinstaller將.py打包成.exe所遇到的坑

Python3.5+PyQt5下使用pyinstaller將.py打包成.exe所遇到的坑

看一下我們的項目目錄:

Python3.5+PyQt5下使用pyinstaller將.py打包成.exe所遇到的坑

dist下面就有我們需要的可執行文件:

Python3.5+PyQt5下使用pyinstaller將.py打包成.exe所遇到的坑

我們雙擊一下試試:我曹報錯了

Python3.5+PyQt5下使用pyinstaller將.py打包成.exe所遇到的坑

解決方法:這個還是很簡答的,少了配置庫文件:

我們添加環境變量:

Python3.5+PyQt5下使用pyinstaller將.py打包成.exe所遇到的坑

位置就是:PyQt5的plugins文件夾所在位置。每個人的可能不一樣。

刪除掉剛才在項目裡面生成的那兩個文件夾:dist和build。繼續:

  • pyinstaller -w -F serial_gui_main.py

在點擊生成的.exe。成功了:

Python3.5+PyQt5下使用pyinstaller將.py打包成.exe所遇到的坑

至此,我在自己的電腦上是沒有任何問題了。在別人的電腦上還沒有測試。

“PyInstaller打包的執行文件,只能在和打包機器系統同樣的環境下。不具備可移植性,若需要在不同系統上運行,就必須針對該平臺進行打包”。這是網上有的網友說的,要真是這樣的話,我感覺就沒有啥意思了。那就得去換別的打包工具了。

但是坑還是繼續的:

  1. 這是一個常見的錯誤

Python3.5+PyQt5下使用pyinstaller將.py打包成.exe所遇到的坑

這個一般是pyinstaller的版本有問題,一般在是gitHub上下載3.4的版本就會出現這個問題,按理說最新的版本是沒有啥問題的,但是確實這個路徑不對。具體怎麼配置這個路徑,我也一直還沒有搞出來,最後不得已換了版本。有做出來的,歡迎留言,我們互相學習一下。

2.還有的會出現這個錯誤:

Python3.5+PyQt5下使用pyinstaller將.py打包成.exe所遇到的坑

這也是一個噁心的錯誤。同樣的環境在,win7上打包就會出現這個問題。具體啥情況,我還是沒有搞出來,最後使用了win10。我也是醉了。

3.這個錯誤

Python3.5+PyQt5下使用pyinstaller將.py打包成.exe所遇到的坑

我直接給了一個簡單粗暴的方法:

你不是找不到那個plugins,那我就直接自己建立這樣一個目錄,把文件複製過來,

這是自己建立的,

Python3.5+PyQt5下使用pyinstaller將.py打包成.exe所遇到的坑

複製的是這裡的:就是PyQt5安裝目錄裡面的那個。

Python3.5+PyQt5下使用pyinstaller將.py打包成.exe所遇到的坑

問題就解決了。

可能這個打包還有問題,只是現在還沒有發現,等我在好好試試了,要是還有問題,我再繼續發文了。


分享到:


相關文章: