Python代碼打包為單個(gè)可執(zhí)行文件實(shí)現(xiàn)過(guò)程
目前最常用的兩種方法是使用 Nuitka 和 PyInstaller
- PyInstaller:這是一個(gè)非常流行的工具,可以將Python腳本打包為單個(gè)可執(zhí)行文件,支持Windows、macOS和Linux。它還能夠自動(dòng)檢測(cè)并包含大多數(shù)Python包和庫(kù)。優(yōu)點(diǎn)是簡(jiǎn)單易用,缺點(diǎn)是在運(yùn)行時(shí)會(huì)釋放一堆臨時(shí)文件。
- Nuitka: 是將Python代碼編譯為C/C++代碼的編譯器,然后再使用C/C++編譯器生成可執(zhí)行文件。與其他打包工具相比,它能產(chǎn)生性能更優(yōu)的可執(zhí)行文件。優(yōu)點(diǎn)是打包后文件執(zhí)行效率高,缺點(diǎn)是打包速度慢且某些庫(kù)不兼容。
PyInstaller
1. 安裝
pip install pyinstaller
2. 基本用法
pyinstaller main.py pyinstaller --onefile main.py pyinstaller --onefile --name=hello main.py
3. 常用參數(shù)
| 參數(shù) | 說(shuō)明 |
|---|---|
| --onefile | 將所有依賴打包成一個(gè)單獨(dú)的可執(zhí)行文件。沒(méi)有這個(gè)選項(xiàng)時(shí),生成的可執(zhí)行文件將依賴于多個(gè)文件 |
| --windowed | 打包為 GUI 應(yīng)用程序,不顯示控制臺(tái)窗口(僅適用于 Windows 和 macOS) |
| --name | 指定生成的可執(zhí)行文件的名稱 |
| --icon | 為生成的可執(zhí)行文件指定圖標(biāo)文件。圖標(biāo)文件通常為 .ico(Windows)或 .icns(macOS)格式。 |
| --add-data | 添加額外的數(shù)據(jù)文件。格式為 source:destination,其中 source 是本地路徑,destination 是可執(zhí)行文件內(nèi)的路徑。 |
| --hidden-import | 手動(dòng)指定需要包含的模塊。如果某些模塊在運(yùn)行時(shí)動(dòng)態(tài)導(dǎo)入,PyInstaller 可能無(wú)法自動(dòng)檢測(cè)到這些依賴項(xiàng) |
| --exclude-module | 手動(dòng)排除某些模塊 |
示例用法如下:
pyinstaller --onefile \
--windowed \
--name=my_program \
--icon=assets/app_icon.ico \
--add-data="resources/config.json;resources" \
--hidden-import=json \
main.py
4. 配置文件
PyInstaller 在首次運(yùn)行時(shí)會(huì)生成一個(gè) .spec 文件,這個(gè)文件定義了打包的所有配置。你可以編輯這個(gè)文件來(lái)自定義打包過(guò)程。
在生成的 my_program.spec 文件中,你可以自定義一些高級(jí)選項(xiàng),比如添加額外的數(shù)據(jù)文件、指定打包目錄等。
例如,添加一個(gè)額外的數(shù)據(jù)文件到 datas 列表中:
datas=[('data_folder/*', 'data')]
使用自定義的 .spec 文件進(jìn)行打包:
pyinstaller my_program.spec
5. 常見(jiàn)問(wèn)題
pyinstaller 執(zhí)行后報(bào)錯(cuò)通常為以下類似問(wèn)題,手動(dòng)導(dǎo)入模塊即可解決
# 未正常導(dǎo)入:Crypto.Cipher.PKCS1_v1_5 ImportError: cannot import name 'PKCS1_v1_5' from 'Crypto.Cipher' # 未正常導(dǎo)入:Crypto.PublicKey.RSA ImportError: cannot import name 'RSA' from 'Crypto.PublicKey' # 未正常導(dǎo)入:boto3 ModuleNotFoundError: No module named 'boto3' # 未正常導(dǎo)入:tqdm ModuleNotFoundError: No module named 'tqdm'
Nuitka
1. 安裝
pip install nuitka
同時(shí)確保安裝了 C 編譯器,如 gcc(Linux)、clang(macOS)、msvc(Windows)或者 MinGW-w64(Windows)。
在 Windows 上,建議使用 MinGW-w64。
2. 打包命令
nuitka --standalone main.py # 使用pandas nuitka --standalone --onefile --plugin-enable=pandas script.py # 使用tkinter、numpy nuitka --standalone --follow-imports --plugin-enable=tk-inter --plugin-enable=numpy example.py # 打包為單文件 nuitka --standalone --onefile --show-progress --lto=yes script.py
3. 常用參數(shù)
--standalone:生成一個(gè)包含所有依賴的目錄--onefile:將所有內(nèi)容打包成一個(gè)單一的可執(zhí)行文件,pip install zstandard 可減小大小--follow-imports:自動(dòng)導(dǎo)入所需模塊--plugin-enable:用于啟用特定的編譯插件,例如:tkinter、PyQt5、Numpy等--show-progress:展示打包進(jìn)度--windows-icon:指定程序圖標(biāo)--windows-disable-console:去掉控制臺(tái)窗口--lto=yes:?jiǎn)⒂面溄訒r(shí)優(yōu)化(Link Time Optimization),可以生成更小、更快的二進(jìn)制文件。
4. 其他用途
編譯 .py 文件為 .pyd
nuitka --module your_script.py
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
PyCharm+Pipenv虛擬環(huán)境開(kāi)發(fā)和依賴管理的教程詳解
這篇文章主要介紹了PyCharm+Pipenv虛擬環(huán)境作開(kāi)發(fā)和依賴管理的教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04
OpenCV根據(jù)面積篩選連通域?qū)W習(xí)示例
這篇文章主要為大家介紹了OpenCV根據(jù)面積篩選連通域?qū)W習(xí)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
django框架基于queryset和雙下劃線的跨表查詢操作詳解
這篇文章主要介紹了django框架基于queryset和雙下劃線的跨表查詢操作,結(jié)合實(shí)例形式詳細(xì)分析了Django框架queryset和雙下劃線的跨表查詢相關(guān)實(shí)現(xiàn)技巧與操作注意事項(xiàng),需要的朋友可以參考下2019-12-12
Python Pygame實(shí)現(xiàn)兔子獵人守護(hù)城堡游戲
這篇文章主要介紹了用python來(lái)制作的一個(gè)守護(hù)類小游戲兔子獵人守護(hù)城堡,文中的示例代碼介紹得很詳細(xì),感興趣的小伙伴快來(lái)跟隨小編一起學(xué)習(xí)學(xué)習(xí)吧2021-12-12
python 圖像處理畫一個(gè)正弦函數(shù)代碼實(shí)例
這篇文章主要介紹了python 圖像處理畫一個(gè)正弦函數(shù)代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09
Python中順序表的實(shí)現(xiàn)簡(jiǎn)單代碼分享
這篇文章主要介紹了Python中順序表的實(shí)現(xiàn)簡(jiǎn)單代碼分享,展示了代碼運(yùn)行結(jié)果,然后分享了相關(guān)實(shí)例代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01
Tensorflow實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)擬合線性回歸
這篇文章主要為大家詳細(xì)介紹了Tensorflow實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)擬合線性回歸,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07

