pyinstaller-打包python程序為exe文件


pyinstaller ---轉載文章

  • 視頻:https://www.bilibili.com/video/av21670971/

  • PyInstaller可以用來打包python應用程序,打包完的程序就可以在沒有安裝Python解釋器的機器上運行了。PyInstaller支持Python 2.7和Python 3.3+。可以在Windows、Mac OS X和Linux上使用,但是並不是跨平台的,而是說你要是希望打包成.exe文件,需要在Windows系統上運行PyInstaller進行打包工作;打包成mac app,需要在Mac OS上使用。

  • 安裝

    • pip isntall pyinstaller
  • 使用

    • 命令行程序
      • pyinstaller helloworld.py
    • 窗口程序+命令行輸出
      • pyinstaller happy_not.py
    • 只有窗口程序
      • pyinstaller -w happy_not.py
  • 重要選項

    • -D, --one-dir打包成一個文件夾,默認
    • -F, --one-file打包成一個exe文件 (啟動慢,在C盤中創建_MEIxxxxxx臨時文件夾,由bootloader復制文件運行結束后自動刪除,意外關閉程序,臨時文件無法刪除)
    • -p DIR, --paths DIR添加路徑,一般用來添加程序所用到的包的所在位置
    • -c, --console,
    • --nowindowed無視窗,程序后台運行
    • -w, --windowed, --noconsole 提供程序視窗,程序沒有命令行輸出,默認
    • -i 添加icon圖標   pyinstaller -F -w -i "D:\360Downloads\2018-10\pyqt5\pyqt5-processBar\pic.icon"  "D:\360Downloads\2018-10\pyqt5\pyqt5-processBar\Main.py 
    • -d, --debug 生成debug模式的exe文件
    • -v FILE, --version=FILE 加入版本信息文件
    • -o DIR, --out=DIR 設置spec文件輸出的目錄,默認在PyInstaller同目錄
  • 經驗

    • py程序中使用了第三方庫的打包方式(如果python 直接使用cmd安裝第三方庫在默認環境下而不是anaconda 可以不用復制第三方庫)
      • 在打包之前務必找到第三方庫的包,把包復制到到跟myfile.py同目錄下,然后再使用以上2種方式打包,否則會打包失敗或者即使打包成功,程序也會閃退
      • 例如使用BeautifulSoup解析xml
        • from bs4 import BeautifulSoup
        • so = BeautifulSoup(msg, 'xml')
          • 使用了lxml模塊,必須把C:\Users\play\AppData\Local\Programs\Python\Python36\Lib\site-packages\lxml文件夾復制到打包文件夾
      • 另外一個方法是
        • import lxml
        • pyinstaller會自動引入

     pyinstaller打包程序常見問題總結:

1、缺少PyQt5.sip

  重新cmd安裝 pip install PyQt5.sip

2

Could not find the Qt platform plugin "windows" in  This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

  解決方法:拷貝pyqt5的platforms文件夾到生成的可執行程序同級目錄下,如我的是:C:\Users\Administrator\AppData\Local\Programs\Python\Python36\Lib\site-packages\PyQt5\Qt\plugins

 

3、打開exe文件運行無反應

    • 首先查看自己打包時候用的參數,如果碼中沒有tkinter之類的GUI窗口的話就不要用 -w 了
      同時查看一下碼里面有沒有標准化輸入輸出,例如print,如果有就不要用 -w
      因為 -w 參數的意思是關掉控制台dos窗口,本來要顯示的東西就只能顯示在dos上,所以自然什都沒有

解決方法:

  • pyinstaller -F xxx.py

4、問題:提示failed to execute script xxx

 這個問題我遇到的時候是用tkinter在寫一個小程序,生成exe點開之后就出現了failed to execute script xxx的問題,如下圖

重新打包,在打包的時候加入了參數 -c 

加入參數-c后重新打包再次運行exe

-c的作用是返回錯誤信息!錯誤信息如上圖所示,沒有找到‘bg.jpg’!
這個文件是我用作tkinter窗口背景的一張資源。
這張圖片是直接放在py文件的同一目錄下的,直接打開py文件運行沒有問題
而生成exe后運行卻提示failed to execute scrip...
問題就出在這里!打包后的exe生成在dist文件夾中,exe不在與資源文件在同一目錄,將‘bg.jpg’ copy到 與exe文件同一目錄下以后問題解決。由此知道,pyinstaller打包並沒有將調用到的資源文件打包在exe文件中,所以exe沒有辦法再用到該資源。解決辦法是將資源和exe文件放到同一目錄或者將源碼中用到的資源路徑改成絕對路徑。

5、問題:打包的時候出現了很多warning:lib not found...dll

  • 原因是pyinstaller 沒有辦法識別到這些dll

解決辦法:是中copy warning中一些dll文件的名字,再電腦中搜索到他們的路徑!
我搜索到的路徑:C:UsersASUSAppDataRoamingpyinstallerbincache00_py36_64bit

該路徑下面就是那一大堆warning的dll文件,這個路徑添加到環境變量里面
方法如下
右鍵 此電腦——屬性——高級——環境變量——用戶變量中Path編輯新建然后填入剛剛dll所在的路徑
然后問題就解決了

6、已經安裝了PyQt5.sip  但是打開打包后的exe文件總是報錯缺少PyQt5.sip

解決辦法:

  在程序中 引用:import PyQt5.sip


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM