Python打包成exe常用的四種方法小結(jié)
將Python腳本打包成可執(zhí)行文件(.exe)是分發(fā)Python應用程序的常見方式。以下是幾種常用的方法:
一.PyInstaller1
PyInstaller 是最常用的工具之一,支持跨平臺(Windows、macOS、Linux)。它可以將Python腳本打包成單個可執(zhí)行文件,并且支持打包依賴項。
1.安裝:
pip install pyinstaller
2. PyInstaller常用參數(shù)下面是pyinstaller的常用參數(shù):
- --name : 指定可執(zhí)行文件名稱。
- --specpath: 指定spec文件的生成目錄,默認為當前目錄。
- -F, --onefile: 將整個應用程序打包到單個可執(zhí)行文件中。
- -D, --onedir: 生成一個目錄,包含多個文件。
- --add-data 、 --add-binary: 在構(gòu)建中插入額外的數(shù)據(jù)或二進制文件,可用于綁定配置文件、示例或其他非代碼數(shù)據(jù)。
- --exclude-module: 排除某些模塊。
- -d, --debug: 提供debug輸出。
- -w, --windowed, --noconsole: 關(guān)閉控制臺窗口(僅對Windows有效)。
- -c, --nowindowed, --console: 使用命令行窗口(僅對Windows有效)。
- -i: 設置應用圖標。
在項目根目錄,打開命令行窗口執(zhí)行命令:pyinstaller 項目入口函數(shù) 即可進行打包,主要生成以下三個內(nèi)容:
- *.spec 文件
- build/ 文件夾:用于構(gòu)建可執(zhí)行文件
- dist/ 文件夾:包含應用程序的所有依賴項和可執(zhí)行文件
3.Flask項目打包為exe
在項目根目錄執(zhí)行如下命令,創(chuàng)建my_app.spec文件,內(nèi)容如下:main.py為python項目入口文件,設置顯示控制臺:
$ pyi-makespec -F -c main.py
# -*- mode: python ; coding: utf-8 -*-
'''
在打包導入某些模塊時,常會出現(xiàn)"RecursionError: maximum recursion depth exceeded"的錯誤,
這可能是打包時出現(xiàn)了大量的遞歸超出了python預設的遞歸深度。因此需要在spec文件上添加遞歸深度的設置,設置一個足夠大的值來保證打包的進行,即
'''
import sys
sys.setrecursionlimit(6000)
block_cipher = None
'''
需要修改pathex的內(nèi)容,寫上所有py文件,和入口文件在一個目錄的不用在前面加地址,否則要加絕對地址
datas中是資源文件夾的所處位置,寫法類似于python元組
第一個參數(shù):Python中的資源文件等非py類型文件的路徑
第二個參數(shù):打包后路徑,要和路徑中的文件夾名稱相同
excludes中是無需導入的第三方庫,直接寫第三庫的名稱即可
'''
a = Analysis(
['main.py'], # flask入口
pathex=['login.py','tool.py','ExcelMySQLToolModify.py'],
binaries=[],
datas=[("E:/**/templates","/templates"),("E:/**/static","/static")],# 將資源的絕對路徑轉(zhuǎn)換為你打包的exe的相對路徑
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=['opencv-python','beautifulsoup4'], #第三庫的名稱
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='my_flask_app', #名字自己定
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,
icon='D:\\images\\logo.ico', # 程序圖標,具體路徑
)
4.開始打包
運行以下命令來使用PyInstaller根據(jù)my_app.spec文件打包flask應用程序:
pyinstaller main.spec
二.cx_Freeze
cx_Freeze 是另一個流行的打包工具,支持跨平臺。它可以將Python腳本打包成可執(zhí)行文件,并且支持打包依賴項。
1.安裝:
cxfreeze your_script.py --target-dir dist
2. 使用:
cxfreeze your_script.py --target-dir dist
三.Py2exe
Py2exe 是一個專門用于將Python腳本打包成Windows可執(zhí)行文件的工具。
1.安裝:
pip install py2exe
2.使用:創(chuàng)建一個 setup.py 文件:
from distutils.core import setup import py2exe setup(console=['your_script.py'])
3.然后運行:
python setup.py py2exe
打包后的文件會生成在 dist 目錄下。
四.Nuitka
Nuitka 是一個Python到C++編譯器,它可以將Python腳本編譯成可執(zhí)行文件。與上述工具不同,Nuitka 會將Python代碼編譯成C++代碼,然后再編譯成可執(zhí)行文件,因此性能可能會有所提升。
1.安裝:
pip install nuitka
2.使用:
nuitka --standalone --onefile your_script.py
nuitka --follow-imports --show-progress --mingw64 main.py --follow-imports # 打包import的文件 --standalone # 脫離python環(huán)境 --show-progress # 展示打包詳情的控制臺輸出 --include-package=requests # 將requests包打包進exe --mingw64 # 指定編譯器 --plugin-enable=requests # 導入第三方包 -o wenshu.exe # 指定exe名字 --output-dir= # 指定打包后的路徑,默認當前路徑 --windows-disable-console # 去掉黑窗口 --windows-icon= # 指定圖標 nuitka --plugin-list # 查看可用的插件
到此這篇關(guān)于Python打包成exe常用的四種方法的文章就介紹到這了,更多相關(guān)Python打包成exe內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于Python實現(xiàn)原創(chuàng)程序猿乘風破浪小游戲
最近學習了一丁點Pygame技能,感覺有點上頭,一波操作創(chuàng)作“程序猿乘風破浪”游戲一款,文中的示例代碼講解詳細,希望大家能夠喜歡2023-02-02
Python實現(xiàn)批量更換指定目錄下文件擴展名的方法
這篇文章主要介紹了Python實現(xiàn)批量更換指定目錄下文件擴展名的方法,結(jié)合完整實例分析了Python批量修改文件擴展名的技巧,并對比分析了shell命令及scandir的兼容性代碼,需要的朋友可以參考下2016-09-09
利用Python第三方庫xlwt寫入數(shù)據(jù)到Excel工作表實例代碼
大家應該都知道xlwt是python中寫入到excel的庫,下面這篇文章主要給大家介紹了關(guān)于利用Python第三方庫xlwt寫入數(shù)據(jù)到Excel工作表的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-07-07
python 添加用戶設置密碼并發(fā)郵件給root用戶
這篇文章主要介紹了python 添加用戶設置密碼并發(fā)郵件給root用戶的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-07-07
python:接口間數(shù)據(jù)傳遞與調(diào)用方法
今天小編就為大家分享一篇python:接口間數(shù)據(jù)傳遞與調(diào)用方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12

