Python: pyinstaller打包exe(含file version信息)


最近項目上一直都是用Spyder直接運行.py文件的方式來執行每日的自動化程序,每天都要手動去點擊Run來執行一次,所以考慮把.py文件直接打包成exe,然后用windows的task schedule功能來讓它自動每天運行。
用pyinstaller來打包exe文件,同時為了便於維護,給exe文件添加文件版本file version信息。

1. 安裝pyinstaller

機器上的python環境是直接安裝的Anaconda軟件,所以直接打開“Anaconda Prompt”來安裝pyinstaller,運行命令:pip install pyinstaller。(如果提示有其他相關的組件xxxx缺失,用相應的方式來安裝就好: pip install xxxx)

2. 設置文件版本信息

為了方便版本管控,最好是給每次打包發布的exe文件設置文件版本信息——右鍵點擊exe查看屬性中的詳情信息中可以看到版本信息。
方法一:
進入pyinstaller的此目錄\PyInstaller\utils\cliutils\下(如果不知道路徑可以通過去全盤查詢cliutils來找到相應的文件夾,此處安利一款window上的文件查詢小軟件——Everything:https://www.voidtools.com/zh-cn/downloads/,查詢速度超級快!)
你會看到如下幾個文件:
其中的grab_version是用來捕獲一個exe文件的版本信息並自動在同一目錄下輸出一個file_version_info.txt文件版本信息的,其中set_version是用來給一個exe文件賦值版本信息的,用法分別如下:
1. 進入cmd界面
2. 將目錄轉移到C:\ProgramData\Anaconda3\Lib\site-packages\PyInstaller\utils\cliutils\下
3. 拷貝一個要獲取版本信息的exe文件到這個目錄下
4. 在cmd窗口鍵入:python grab_version.py filename.exe
5. 目錄下會自動出現一個標准的file_version_info.txt文件,雙擊打開,按照相應的需求修改
6. 在cmd窗口鍵入:python set_version.py file_version_info.txt youfilename.exe即可
方法二:
在打包的時候就已經准備好了版本信息文件:file_version_info.txt
打包時用此參數--version-file 即可:pyinstaller --version-file file_version_info.txt test.py
最后打包成exe,可以右鍵點擊exe文件查看詳細信息,可以看到有文件版本信息。

3. 運行pyinstaller來打包exe

一般用pyinstaller打包exe會用到-F參數(表示打包成一個EXE文件)或者--version-file(給exe文件賦予版本信息),其他參數如需了解,可以輸入pyinstaller -h來獲取幫助信息。
比如需要打包test.py文件為exe,用如下方式:

4. 打包exe過程中遇到的問題:

一般來說,如果是機器上組件缺失導致打包失敗,安裝相應的組件即可。
我也遇到了2個比較特殊的問題:
問題1: 打包提示報錯:Cannot find existing PyQt5 plugin directories
解決方法:創建PyQt5 plugin的路徑,按報錯的路徑來新建,然后將本來pyqt文件加中的pyqt5qmlplugin.dll文件拷貝放入此路徑即可。
  1. 先查詢機器是上否有安裝pyqt以及文件夾,可以用Anaconda Prompt中輸入conda list來查看機器上的pyqt的版本以及路徑信息(同理,也可以用Everything來查詢此dll文件來定位到文件夾路徑)。
2. 新建報錯中提到的路徑,同時把dll文件拷貝進去。
再次打包運行就不會再報此錯誤了。
問題2:打包提示報錯:RecursionError: maximum recursion depth exceeded
解決方法:因為python在處理循環的時候是手限制的,所以解除此限制即可
在打包文件夾中找到新生成的spec文件(比如test.spec),然后在該文件最上面添加如下2行來重定義循環次數即可;再運行此spec文件來打包即可:
import sys sys.setrecursionlimit(5000)
 


免責聲明!

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



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