PyInstaller打包Python腳本的使用示例
1. 寫在前面
通常,在用 Python 編寫完一個腳本后,需要將它部署并集成到一個更大的項目中。常見的集成方式有以下幾種:
- 使用 PyInstaller 打包。
- 使用 Docker 打包。
- 將 Python 嵌入到 C++ 代碼中,并封裝成類。
- 將 Python 代碼轉(zhuǎn)換為 C++ 代碼。
本文介紹其中一種方式——使用 PyInstaller 打包。通過 PyInstaller,可以將 Python 腳本打包成 .exe
文件(適用于 Windows)或適用于 macOS 和 Linux 的可執(zhí)行文件,用戶無需安裝 Python 或任何相關(guān)依賴,便能直接運行程序。
主要優(yōu)勢:
- 將 Python 腳本打包成獨立可執(zhí)行文件,方便分發(fā)和運行。
- 支持單文件打包、圖標(biāo)定制、以及額外文件的捆綁。
- 可選隱藏控制臺窗口,適合圖形化應(yīng)用(GUI)程序。
適用場景:
- 發(fā)布桌面工具或命令行程序。
- 讓沒有 Python 環(huán)境的用戶也能使用你的工具。
- 分享自包含的 Python 項目,確保目標(biāo)機器能夠順利運行。
2. 打包指令解析與參數(shù)詳解
參數(shù)名 | 描述 | 示例 | 類型 | 必須 | 默認(rèn)值 |
---|---|---|---|---|---|
--onefile | 將所有依賴文件打包為單個可執(zhí)行文件。 | pyinstaller --onefile example.py | bool | 否 | False |
--noconsole | 隱藏控制臺窗口(適用于 GUI 應(yīng)用)。 | pyinstaller --noconsole gui_app.py | bool | 否 | False |
--name | 指定生成的可執(zhí)行文件名稱。 | pyinstaller --name=my_app example.py | str | 否 | 源文件名(無擴展) |
--icon | 設(shè)置可執(zhí)行文件的圖標(biāo)(需提供 .ico 文件)。 | pyinstaller --icon=app_icon.ico example.py | str | 否 | None |
--add-data | 捆綁額外文件(如配置文件、靜態(tài)資源等)。 | pyinstaller --add-data "config.yaml;." example.py | str | 否 | None |
--clean | 清理之前的構(gòu)建緩存,強制重新打包。 | pyinstaller --clean example.py | bool | 否 | False |
--hidden-import | 手動添加隱藏的依賴模塊(通常是自動檢測遺漏的依賴)。 | pyinstaller --hidden-import=requests example.py | list | 否 | 自動檢測 |
3. 基礎(chǔ)步驟
1. 安裝 PyInstaller
在終端(或命令行)中運行以下命令,安裝 PyInstaller:
pip install pyinstaller
2. 使用基礎(chǔ)命令進行打包
假設(shè)你有一個 Python 腳本 example_script.py
,使用下面的命令將其打包為一個獨立的可執(zhí)行文件:
pyinstaller --onefile example_script.py
- 該命令會將所有依賴項和代碼打包成一個單一的
.exe
文件。 - 打包后,可以在
dist
目錄下找到生成的可執(zhí)行文件。
4. 常見的用法示例
示例 1:基礎(chǔ)打包
將 example_script.py
打包為一個單文件可執(zhí)行程序:
pyinstaller --onefile example_script.py
示例 2:自定義名稱和圖標(biāo)
將輸出文件命名為 my_program.exe
,并指定圖標(biāo)文件為 app_icon.ico
:
pyinstaller --onefile --name=my_program --icon=app_icon.ico example_script.py
示例 3:捆綁額外文件
將配置文件 config.yaml
一起捆綁進可執(zhí)行文件:
pyinstaller --onefile --add-data "config.yaml;." example_script.py
注意:在 Windows 系統(tǒng)中,路徑分隔符用分號 ;
,而在 macOS/Linux 中使用冒號 :
。
示例 4:解決缺失依賴問題
如果在運行時遇到某個模塊丟失的錯誤,可以通過 --hidden-import
指定手動引入依賴:
pyinstaller --onefile --hidden-import=requests example_script.py
示例 5:隱藏控制臺窗口
適用于圖形界面(GUI)應(yīng)用程序,運行時隱藏控制臺窗口:
pyinstaller --onefile --noconsole gui_app.py
5. 注意事項(路徑)
路徑問題:使用
--add-data
時,不同操作系統(tǒng)的路徑分隔符需特別注意。- Windows:
"source;destination"
- macOS/Linux:
"source:destination"
- Windows:
文件路徑問題:在代碼中訪問本地文件時,使用相對路徑獲取的文件可能會在打包后無法找到。此時,建議使用以下方式獲取正確的文件路徑:
BASE_DIR = os.path.dirname(os.path.realpath(sys.argv[0]))
6. 錯誤處理和日志記錄
在打包的 Python 應(yīng)用中,為了方便調(diào)試,可以加入錯誤處理代碼,將錯誤信息記錄到文件中,幫助定位問題。
try: # 代碼邏輯 pass except Exception as e: print("An error occurred:", e) with open("error_log.txt", "w") as f: f.write(str(e))
如果可執(zhí)行文件出現(xiàn)問題,能夠在 error_log.txt
中查看詳細(xì)的錯誤信息。
例如,
這就是一個文件路徑錯誤的報錯,原因在于生成的可執(zhí)行文件是在 dist
目錄下,但是文件路徑是相對路徑,在 ../
上,知道問題就可以解決了。否則,有時候連報錯都不知道在哪。
另外,如果想要更加優(yōu)雅地打包python,建議配合以下教程食用:
Python 參數(shù)配置使用 XML 文件的教程:輕松管理你的項目配置
到此這篇關(guān)于PyInstaller打包Python腳本的使用示例的文章就介紹到這了,更多相關(guān)PyInstaller打包Python腳本內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 用PyInstaller把Python代碼打包成單個獨立的exe可執(zhí)行文件
- Python打包方法Pyinstaller的使用
- python-pyinstaller、打包后獲取路徑的實例
- Python中用pyinstaller打包時的圖標(biāo)問題及解決方法
- python3.9實現(xiàn)pyinstaller打包python文件成exe
- 教你使用pyinstaller打包Python教程
- python使用Pyinstaller如何打包整個項目
- PyInstaller?完美打包?Python?腳本
- Python?pyinstaller打包exe最新完整圖文教程
- Python使用pyinstaller打包成.exe文件執(zhí)行后閃退的圖文解決辦法
相關(guān)文章
在Python操作時間和日期之a(chǎn)sctime()方法的使用
這篇文章主要介紹了在Python操作時間和日期之a(chǎn)sctime()方法的使用,是Python入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-05-05使用 Python 處理3萬多條數(shù)據(jù)只要幾秒鐘
在工作中經(jīng)常遇到大量的數(shù)據(jù)需要整合、去重、按照特定格式導(dǎo)出等情況。這篇文章主要介紹了使用 Python 處理3萬多條數(shù)據(jù)只要幾秒鐘的相關(guān)知識,需要的朋友可以參考下2020-01-01PyQt5實現(xiàn)QLineEdit添加clicked信號的方法
今天小編就為大家分享一篇PyQt5實現(xiàn)QLineEdit添加clicked信號的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06用python實現(xiàn)日志文件,并且按時間命名文件名方式
這篇文章主要介紹了用python實現(xiàn)日志文件,并且按時間命名文件名方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08Python中處理字符串之endswith()方法的使用簡介
這篇文章主要介紹了Python中處理字符串之endswith()方法的使用,是Python入門中的基礎(chǔ)知識,需要的朋友可以參考下2015-05-05pytorch算子torch.arange在CPU?GPU?NPU中支持?jǐn)?shù)據(jù)類型格式
這篇文章主要為大家介紹了pytorch算子torch.arange在CPU?GPU?NPU支持?jǐn)?shù)據(jù)類型格式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-09-09