在 Python 开发项目完成后,常常需要将代码打包成可执行文件,以便在不同环境中方便地运行。本文介绍了三种常用的打包工具:Nuitka、PyInstaller 和 Auto-py-to-exe,并详细说明了它们的使用方法。
Nuitka 是一个将 Python 代码编译为 C 代码,然后再编译为可执行文件的工具。它对 PySide 有较好的支持,并且打包后的文件体积相对较小。
首先,需要安装 Nuitka 和 zstandard:
pip install nuitka zstandard
对于 PyQt6 项目打包:
python -m nuitka --onefile --windows-disable-console --enable-plugin=pyqt6 <your_app>.py
对于 PySide6 项目打包:
python -m nuitka --onefile --windows-disable-console --enable-plugin=pyside6 --follow-import-to=need --output-dir=output <your_app>.py
通过上述命令,Nuitka 可以将 Python 应用打包成单个文件,并且可以根据需要禁用控制台窗口,启用相应的插件。压缩后文件大小仅 15MB 左右,相比原始的依赖体积有显著减小。
PyInstaller 是另一个广泛使用的 Python 打包工具,它可以将 Python 脚本及其所有依赖打包成一个或多个可执行文件。
pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple
为了进一步减小打包体积,可以使用 UPX 工具。从 官网 下载 UPX 执行文件,解压后将 upx.exe
文件复制到 pyinstaller.exe
所在的文件夹(通常是 Scripts
文件夹)。这样,PyInstaller 在打包时会自动使用 UPX 对生成的可执行文件进行压缩。
PyInstaller 有两种主要的打包方式:
pyinstaller xxx.py
这种方式会生成一个包含可执行文件和相关依赖的文件夹。
pyinstaller -F xxx.py
这种方式将所有依赖打包到一个文件中,生成的单个文件可以在其他机器上直接运行。
需要注意的是,PyInstaller 只是将代码打包成本平台的执行文件,不支持交叉编译。例如,在 Ubuntu 上不能直接打包成 Windows 平台的 .exe
文件。
除了命令行方式,也可以使用 spec 文件进行打包。例如,对于 run.py
文件,可以创建如下的 run.spec
文件:
# run.spec
# -*- mode: python ; coding: utf-8 -*-
a = Analysis(
['run.py'],
pathex=['shiboken6.abi3.dll'],
binaries=[],
datas=[('files/*', 'files/')], # 将同级文件夹下的所有文件打包到可执行文件的根目录
hiddenimports=['PySide6.QtSvg'],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=['ultralytics'],
noarchive=False,
optimize=0,
)
pyz = PYZ(a.pure)
exe = EXE(
pyz,
a.scripts,
[],
exclude_binaries=True,
name='run',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=True,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
icon=['logo.ico'],
)
coll = COLLECT(
exe,
a.binaries,
a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='run',
)
然后在终端运行 pyinstaller run.spec
即可完成打包。
执行打包命令后,会在目录下生成以下文件:
exe
文件就是可执行程序。_internal
文件夹包含了所有依赖,如果出现依赖未找到的情况,可以从指定环境中拷贝。Auto-py-to-exe 是一个基于 PyInstaller 的图形化工具,使得打包过程更加简单直观。
首先进入虚拟环境,安装相关依赖:
pip install gevent-websocket
pip install setuptools==57.5.0
pip install greenlet==1.1.3 gevent==22.8.0
pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple
然后在自己的文件夹中下载 auto-py-to-exe
:
git clone https://github.com/brentvollebregt/auto-py-to-exe.git
python setup.py install
安装完成后,在指定虚拟环境中输入 auto-py-to-exe
即可打开图形化界面。
通过以上三种工具,我们可以根据项目的具体需求选择合适的打包方式,将 Python 代码打包成可执行文件,方便在不同环境中运行和部署。
✅⚠️▶️➡️⭐❄️✅⚠️▶️➡️⭐❄️✅⚠️▶️➡️⭐❄️✅⚠️