最簡(jiǎn)單的pyinstaller打包exe方式小結(jié)
1.背景
- 在實(shí)際工作過(guò)程中,python項(xiàng)目文件完成開(kāi)發(fā)后,存在打包成exe使用的需求,而如何正確并且快捷的實(shí)現(xiàn)打包尤為重要,目前python打包的方式很多,包括py2exe,pyinstaller,cx_Freeze,nuitka以及Pyarmor,本次只針對(duì)pyinstaller進(jìn)行說(shuō)明。
- PyInstaller是一個(gè)用于將Python應(yīng)用程序打包成獨(dú)立可執(zhí)行文件的庫(kù)。它可以將Python代碼及其所有依賴項(xiàng)(包括第三方庫(kù)和資源文件)打包到一個(gè)單獨(dú)的可執(zhí)行文件中,使得應(yīng)用程序可以在沒(méi)有Python解釋器環(huán)境的系統(tǒng)上獨(dú)立運(yùn)行。
2.特點(diǎn)
以下是PyInstaller的一些主要特點(diǎn)和功能:
- 跨平臺(tái)支持:PyInstaller可以在主流操作系統(tǒng)(如Windows、macOS和Linux)上運(yùn)行,并生成相應(yīng)平臺(tái)的可執(zhí)行文件
- 自動(dòng)化打包:PyInstaller會(huì)分析Python代碼及其依賴項(xiàng),自動(dòng)檢測(cè)所需的模塊和資源文件,并將它們打包到一個(gè)可執(zhí)行文件中
- 獨(dú)立可執(zhí)行文件:打包后的可執(zhí)行文件包含了應(yīng)用程序的所有依賴項(xiàng),不需要用戶單獨(dú)安裝Python解釋器或相關(guān)庫(kù)
- 支持多種打包選項(xiàng):PyInstaller提供了多種打包選項(xiàng),可以定制可執(zhí)行文件的行為,如設(shè)置命令行參數(shù)、圖標(biāo)、文件路徑等
- 支持多種GUI框架:PyInstaller支持常見(jiàn)的GUI框架,如Tkinter、PyQt、wxPython等,可以將基于這些框架開(kāi)發(fā)的應(yīng)用程序打包為獨(dú)立可執(zhí)行文件
3.打包方式
3.1單文件打包法
單個(gè)文件內(nèi)容,直接使用pyinstaller命令打包,打包后自動(dòng)生成exe運(yùn)行文件使用。
# 1.執(zhí)行命令 pyinstaller -F xxx.py # 2.去生成的dist文件夾找xxx.exe運(yùn)行 # 3.運(yùn)行成功,xxx.exe則為可執(zhí)行文件,刪除其它文件
3.2多文件打包法
當(dāng)存在多個(gè)文件時(shí),需要指定好程序入口文件,使用pyinstall -D后,生成spec文件,修改spec文件,再使用pyinstaller -F打包。
# 1.執(zhí)行命令,xxx.py為程序入口文件 pyinstall -D xxx.py # 2.刪除生成的bulid和dist文件夾,僅保留xxx.spec文件 # 3.修改xxx.spec文件,詳見(jiàn)2.2.1 # 4.執(zhí)行命令 pyinstaller -F xxx.spec # 5.去dist文件夾下找xxx.exe文件 # 6.運(yùn)行成功,刪除臨時(shí)文件目錄build;dist目錄為打包的結(jié)果,可執(zhí)行文件和其它程序運(yùn)行的關(guān)聯(lián)文件都在這個(gè)目錄下
3.3配置文件打包法(最為簡(jiǎn)單)
此種方法最為直接簡(jiǎn)單,先生成spec配置文件,然后修改文件后,直接使用pyinstaller命令打包。
#第一步生成配置文件 pyi-makespec XXX.py 獲取spec配置 #第二步修改配置文件 #第三步打包命令 pyinstaller XXX.spec
打包過(guò)程如圖:

打包成功結(jié)果如圖:

4.SPEC配置文件
以下是spec配置文件,還可以直接按照文件內(nèi)容提示填入所需文件名、打包名稱等,從而更為簡(jiǎn)單的使用pyinstaller XXX.spec完成打包。
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(
['PY主文件',
'PY1輔助文件',
'PY2輔助文件',
'PY3輔助文件',],
pathex=['多個(gè)PY文件所在路徑'],
binaries=[],# 程序調(diào)用外部pyd、dll文件(二進(jìn)制文件路徑)以數(shù)組形式傳入
datas=[],# 存放的資源文件
hiddenimports=[],# pyinstaller解析模塊時(shí)可能會(huì)遺漏某些模塊
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False,
)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
name='修改EXE的文件名',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
)
5.拓展
對(duì)提到的五種打包庫(kù)進(jìn)行以下簡(jiǎn)單介紹:
- py2exe:
- 跨平臺(tái)支持有限,主要用于將Python腳本打包為Windows可執(zhí)行文件
- 簡(jiǎn)單易用,配置相對(duì)簡(jiǎn)單,適合簡(jiǎn)單的打包需求
- 可以將Python解釋器和依賴項(xiàng)打包到單個(gè)可執(zhí)行文件中
- PyInstaller:
- 跨平臺(tái)支持廣泛,可以生成Windows、macOS和Linux等系統(tǒng)上的可執(zhí)行文件
- 自動(dòng)化打包,能夠自動(dòng)檢測(cè)和包含所有依賴項(xiàng)
- 支持多種GUI框架,如Tkinter、PyQt、wxPython等
- 可以生成獨(dú)立的可執(zhí)行文件,無(wú)需安裝Python解釋器
- cx_Freeze:
- 跨平臺(tái)支持,可以生成Windows、macOS和Linux等系統(tǒng)上的可執(zhí)行文件
- 配置靈活,可以根據(jù)需求進(jìn)行定制
- 支持多種GUI框架和第三方庫(kù)
- 生成的可執(zhí)行文件較小,具有較小的內(nèi)存占用
- Nuitka:
- 將Python代碼編譯為機(jī)器碼,提高執(zhí)行效率
- 生成的可執(zhí)行文件性能較高,執(zhí)行速度比解釋執(zhí)行的Python代碼更快
- 與許多第三方庫(kù)和C擴(kuò)展兼容
- 跨平臺(tái)支持廣泛,可以生成Windows、macOS和Linux等系統(tǒng)上的可執(zhí)行文件
- Pyarmor:
- 用于保護(hù)Python代碼,提供加密和混淆功能,以防止未經(jīng)授權(quán)的訪問(wèn)和復(fù)制
- 支持對(duì)Python腳本進(jìn)行防調(diào)試和防反向工程處理
- 配置簡(jiǎn)單,可以與其他打包工具結(jié)合使用
- 跨平臺(tái)支持,可以在不同系統(tǒng)上使用
這些工具在Python打包和分發(fā)方面都有其獨(dú)特的特點(diǎn)和適用場(chǎng)景,選擇合適的工具取決于我們的具體需求,例如目標(biāo)平臺(tái)、代碼保護(hù)需求、對(duì)第三方庫(kù)的支持程度以及打包后的可執(zhí)行文件的性能要求等。
到此這篇關(guān)于最簡(jiǎn)單的pyinstaller打包exe方式小結(jié)的文章就介紹到這了,更多相關(guān)pyinstaller打包exe內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 使用pyinstaller打包.exe文件的詳細(xì)教程
- Pyinstaller將py打包成exe的實(shí)例
- 用PyInstaller把Python代碼打包成單個(gè)獨(dú)立的exe可執(zhí)行文件
- 如何使用pyinstaller打包32位的exe程序
- 解決pyinstaller打包發(fā)布后的exe文件打開(kāi)控制臺(tái)閃退的問(wèn)題
- python pyinstaller打包exe報(bào)錯(cuò)的解決方法
- 利用pyinstaller打包exe文件的基本教程
- Pyinstaller打包.py生成.exe的方法和報(bào)錯(cuò)總結(jié)
- pyinstaller打包程序exe踩過(guò)的坑
- 利用pyinstaller將py文件打包為exe的方法
相關(guān)文章
Python內(nèi)存管理精準(zhǔn)釋放與延遲拷貝技術(shù)探究
這篇文章主要為大家介紹了Python內(nèi)存管理精準(zhǔn)釋放與延遲拷貝技術(shù)探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
基于Python實(shí)現(xiàn)用戶管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了基于Python實(shí)現(xiàn)用戶管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02
pygame實(shí)現(xiàn)俄羅斯方塊游戲(基礎(chǔ)篇3)
這篇文章主要介紹了pygame實(shí)現(xiàn)俄羅斯方塊游戲基礎(chǔ)的第3篇,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10
Python中使用glob和rmtree刪除目錄子目錄及所有文件的例子
這篇文章主要介紹了python中使用glob和rmtree刪除目錄子目錄及所有文件的例子,需要的朋友可以參考下2014-11-11
Python list和str互轉(zhuǎn)的實(shí)現(xiàn)示例
這篇文章主要介紹了Python list和str互轉(zhuǎn)的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
Python基于分析Ajax請(qǐng)求實(shí)現(xiàn)抓取今日頭條街拍圖集功能示例
這篇文章主要介紹了Python基于分析Ajax請(qǐng)求實(shí)現(xiàn)抓取今日頭條街拍圖集功能,涉及Python針對(duì)今日頭條URL請(qǐng)求與json數(shù)據(jù)處理相關(guān)操作技巧,需要的朋友可以參考下2018-07-07
python 常見(jiàn)的排序算法實(shí)現(xiàn)匯總
這篇文章主要介紹了python 常見(jiàn)的排序算法,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下2020-08-08
解決python的空格和tab混淆而報(bào)錯(cuò)的問(wèn)題
這篇文章主要介紹了解決python的空格和tab混淆而報(bào)錯(cuò)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02

