PyInstaller將Python腳本打包為.exe可執(zhí)行文件的步驟詳解
前言
- Python 是一門強(qiáng)大而靈活的編程語言,然而,在與非技術(shù)人員分享 Python 腳本時,他們可能不具備安裝 Python 解釋器的經(jīng)驗(yàn)。為了方便共享和部署,我們可以將 Python 腳本打包為可執(zhí)行文件(.exe),這樣其他用戶就無需安裝 Python 環(huán)境,直接運(yùn)行可執(zhí)行文件即可。本文將介紹如何使用 PyInstaller 工具實(shí)現(xiàn)這一目標(biāo)。
PyInstaller
- PyInstaller是一個用于將Python腳本打包成獨(dú)立可執(zhí)行文件的工具。它的目標(biāo)是方便地將Python應(yīng)用程序分發(fā)給沒有安裝Python解釋器的用戶,使得Python腳本可以在沒有Python環(huán)境的系統(tǒng)上運(yùn)行。
特點(diǎn)
跨平臺支持
- PyInstaller可以在Windows、Linux和MacOS等多個平臺上運(yùn)行,并生成相應(yīng)平臺的可執(zhí)行文件。
自動依賴項處理
- PyInstaller會自動檢測Python腳本的依賴項,并將它們打包到生成的可執(zhí)行文件中。
單文件發(fā)布
- 使用--onefile選項,可以將所有的依賴項打包成一個單獨(dú)的可執(zhí)行文件,方便分發(fā)和部署。
支持圖形用戶界面(GUI)和命令行界面(CLI)應(yīng)用
- PyInstaller適用于各種類型的Python應(yīng)用,包括包含圖形用戶界面的桌面應(yīng)用和命令行工具。
支持多種打包選項
- PyInstaller提供了許多命令行選項,允許用戶靈活配置打包過程,例如指定可執(zhí)行文件的名稱、添加圖標(biāo)、手動添加依賴項等。
基本用法
pyinstaller your_script.py
常用參數(shù)
--onefile(-F)
: 將所有依賴項打包成一個單獨(dú)的可執(zhí)行文件。
pyinstaller --onefile your_script.py
--name your_custom_name
: 指定生成的可執(zhí)行文件的名稱
pyinstaller --name your_custom_name your_script.py
--icon=your_icon.ico
: 指定生成的可執(zhí)行文件的圖標(biāo)。圖標(biāo)文件通常是 .ico 格式。
pyinstaller --onefile --icon=your_icon.ico your_script.py
--hidden-import=module_name
: 手動添加缺失的依賴項
pyinstaller --onefile --requirements=requirements.txt your_script.py
--requirements=requirements.txt
: 指定包含依賴項列表的文件。
pyinstaller --onefile --requirements=requirements.txt your_script.py
其它參數(shù)
--clean: 在打包前刪除臨時文件和輸出目錄。
--debug: 在調(diào)試模式下運(yùn)行 PyInstaller。
--log-level: 指定日志級別,如 --log-level=DEBUG。
-w 是一個命令行選項,用于生成無控制臺窗口的可執(zhí)行文件。
-p 用于添加模塊搜索路徑。
版本 & 環(huán)境
- Python 2.7
- Windows 11 家庭中文版
實(shí)現(xiàn)步驟
安裝 PyInstaller
- 首先確保你已經(jīng)安裝了
Python
。然后,打開命令行或終端,并運(yùn)行以下命令安裝PyInstaller
:
pip install pyinstaller
- 注意:由于本人使用的是
Python 2.7
,Python 2.7
已經(jīng)在2020年結(jié)束了官方支持。然而,PyInstaller 3.6.0
是最后一個官方宣布支持Python 2.x
的版本。因此我們需要指定PyInstaller
的版本,否則會安裝失敗。
pip install pyinstaller==3.6.0
創(chuàng)建 Python 腳本
- 編寫你的 Python 腳本,并確保它能夠在你的本地 Python 環(huán)境中正常運(yùn)行。這個腳本將是最終可執(zhí)行文件的源代碼。
- 這里我直接使用最近編寫的一個爬蟲小程序作為示例。
使用 PyInstaller 打包
$ pyinstaller --onefile -p venv/Lib/site-packages 20231207.py 39 INFO: PyInstaller: 3.6 39 INFO: Python: 2.7.18 39 INFO: Platform: Windows-10-10.0.22621 39 INFO: wrote C:\Users\MQiuj\PycharmProjects\pythonProject\20231207.spec 40 INFO: UPX is not available. 45 INFO: Extending PYTHONPATH with paths ['C:\\Users\\MQiuj\\PycharmProjects\\pythonProject', 'C:\\Users\\MQiuj\\PycharmProjects\\pythonProject\\venv\\Lib\\site-packages', 'C:\\Users\\MQiuj\\PycharmProjects\\pythonProject'] 45 INFO: checking Analysis 46 INFO: Building because pathex changed 46 INFO: Initializing module dependency graph... 46 INFO: Caching module graph hooks... 53 INFO: Caching module dependency graph... 61 INFO: running Analysis Analysis-00.toc 62 INFO: Adding Microsoft.VC90.CRT to dependent assemblies of final executable required by c:\python27\python.exe 115 INFO: Found C:\WINDOWS\WinSxS\Manifests\amd64_policy.9.0.microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.9635_none_acd031d7e1db7c28.manifest 167 INFO: Searching for assembly amd64_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30729.9635_none ... 167 INFO: Found manifest C:\WINDOWS\WinSxS\Manifests\amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.9635_none_08e2c157a83ed5da.manifest 168 INFO: Searching for file msvcr90.dll 168 INFO: Found file C:\WINDOWS\WinSxS\amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.9635_none_08e2c157a83ed5da\msvcr90.dll 168 INFO: Searching for file msvcp90.dll 168 INFO: Found file C:\WINDOWS\WinSxS\amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.9635_none_08e2c157a83ed5da\msvcp90.dll 168 INFO: Searching for file msvcm90.dll 168 INFO: Found file C:\WINDOWS\WinSxS\amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.9635_none_08e2c157a83ed5da\msvcm90.dll 219 INFO: Found C:\WINDOWS\WinSxS\Manifests\amd64_policy.9.0.microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.9635_none_acd031d7e1db7c28.manifest 219 INFO: Adding redirect Microsoft.VC90.CRT version (9, 0, 21022, 8) -> (9, 0, 30729, 9635) 240 INFO: Analyzing C:\Users\MQiuj\PycharmProjects\pythonProject\20231207.py 951 INFO: Processing pre-safe import module hook urllib3.packages.six.moves 2621 INFO: Processing module hooks... 2621 INFO: Loading module hook "hook-httplib.py"... 2622 INFO: Loading module hook "hook-encodings.py"... 2865 INFO: Loading module hook "hook-certifi.py"... 2874 INFO: Looking for ctypes DLLs 2874 INFO: Analyzing run-time hooks ... 2875 INFO: Including run-time hook 'pyi_rth_certifi.py' 2877 INFO: Looking for dynamic libraries 2930 INFO: Looking for eggs 2930 INFO: Using Python library C:\WINDOWS\system32\python27.dll 2930 INFO: Found binding redirects: [BindingRedirect(name=u'Microsoft.VC90.CRT', language=None, arch=u'amd64', oldVersion=(9, 0, 21022, 8), newVersion=(9, 0, 30729, 9635), publicKeyToken=u'1fc8b3b9a1e18e3b')] 2933 INFO: Warnings written to C:\Users\MQiuj\PycharmProjects\pythonProject\build\20231207\warn-20231207.txt 2951 INFO: Graph cross-reference written to C:\Users\MQiuj\PycharmProjects\pythonProject\build\20231207\xref-20231207.html 2982 INFO: checking PYZ 2983 INFO: Building because toc changed 2983 INFO: Building PYZ (ZlibArchive) C:\Users\MQiuj\PycharmProjects\pythonProject\build\20231207\PYZ-00.pyz 3257 INFO: Building PYZ (ZlibArchive) C:\Users\MQiuj\PycharmProjects\pythonProject\build\20231207\PYZ-00.pyz completed successfully. 3288 INFO: checking PKG 3288 INFO: Building because toc changed 3288 INFO: Building PKG (CArchive) PKG-00.pkg 3384 INFO: Redirecting Microsoft.VC90.CRT version (9, 0, 21022, 8) -> (9, 0, 30729, 9635) 4298 INFO: Building PKG (CArchive) PKG-00.pkg completed successfully. 4299 INFO: Bootloader c:\python27\lib\site-packages\PyInstaller\bootloader\Windows-64bit\run.exe 4299 INFO: checking EXE 4300 INFO: Building because toc changed 4300 INFO: Building EXE from EXE-00.toc 4300 INFO: Appending archive to EXE C:\Users\MQiuj\PycharmProjects\pythonProject\dist\20231207.exe 4306 INFO: Building EXE from EXE-00.toc completed successfully.
- 注:由于部分依賴沒有自動掃描打入可執(zhí)行文件中,使用
-p
命令手動指定依賴打入。
運(yùn)行
- 點(diǎn)擊
20231207.exe
運(yùn)行,按照預(yù)期運(yùn)行:
總結(jié)
- 本文介紹了
pyinstaller
工具的使用以及常用參數(shù),并結(jié)合實(shí)際案例進(jìn)行實(shí)戰(zhàn)將我們的Pyhton
腳本打包為了.exe
可執(zhí)行文件。
以上就是PyInstaller將Python腳本打包為.exe可執(zhí)行文件的步驟詳解的詳細(xì)內(nèi)容,更多關(guān)于PyInstaller Python腳本打包為.exe的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Pycharm運(yùn)行程序時,控制臺輸出PyDev?console:starting問題
Pycharm運(yùn)行程序時,控制臺輸出PyDev?console:starting問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05python+pyhyper實(shí)現(xiàn)識別圖片中的車牌號思路詳解
最近領(lǐng)導(dǎo)給布置了一個基于圖片識別車牌號的工具開發(fā)任務(wù),然后就去研究實(shí)現(xiàn)邏輯,自己根據(jù)opencv寫了一個小demo,發(fā)現(xiàn)不僅速度慢而且成功率極低。然后,就找到了Hyperlpr開源項目,這篇文章主要介紹了python+pyhyper實(shí)現(xiàn)識別圖片中的車牌號,需要的朋友可以參考下2022-12-12Python整合Milvus向量數(shù)據(jù)庫的實(shí)戰(zhàn)指南
在向量數(shù)據(jù)庫技術(shù)快速發(fā)展的今天,Milvus作為開源領(lǐng)域的領(lǐng)軍產(chǎn)品,正成為AI應(yīng)用開發(fā)的重要基礎(chǔ)設(shè)施,本章將深入講解Python與Milvus向量數(shù)據(jù)庫的整合實(shí)踐,感興趣的小伙伴可以了解下2025-05-05Python enumerate遍歷數(shù)組示例應(yīng)用
遍歷數(shù)組的python代碼2008-09-09基于Python實(shí)現(xiàn)大文件分割和命名腳本過程解析
這篇文章主要介紹了基于Python實(shí)現(xiàn)大文件分割和命名腳本過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-09-09Python批量將Word文檔(.doc)轉(zhuǎn)換為.docx格式的完整實(shí)現(xiàn)步驟
這篇文章主要介紹了Python批量將Word文檔(.doc)轉(zhuǎn)換為.docx格式的完整實(shí)現(xiàn)步驟,文中通過代碼介紹的非常詳細(xì),適用于Windows系統(tǒng),解決了手動轉(zhuǎn)換的低效率和出錯率問題,需要的朋友可以參考下2024-12-12pytorch 實(shí)現(xiàn)在測試的時候啟用dropout
這篇文章主要介紹了pytorch 實(shí)現(xiàn)在測試的時候啟用dropout的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-05-05Python 運(yùn)行.py文件和交互式運(yùn)行代碼的區(qū)別詳解
這篇文章主要介紹了Python 運(yùn)行.py文件和交互式運(yùn)行代碼的區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07