Python作为解释型语言,源代码默认以.py文件形式存在。将Python程序打包成可执行文件具有以下优势:
目前Python生态中有多个成熟的打包工具,各有特点:
工具名称支持平台打包方式文件大小启动速度PyInstallerWin/Lin/Mac单文件/目录较大较慢cx_FreezeWin/Lin/Mac目录中等中等Py2exeWindows目录较小较快NuitkaWin/Lin/Mac编译为二进制最小最快
PyInstaller是目前最流行的Python打包工具,其基本使用流程如下:
# 安装PyInstaller
pip install pyinstaller
# 基本打包命令
pyinstaller your_script.py
# 常用参数说明
--onefile # 打包为单个exe文件
--windowed # 不显示控制台窗口(GUI程序)
--icon=icon.ico # 设置程序图标
# 在spec文件中添加hiddenimports
hiddenimports = ['PyQt5.QtNetwork']
2. 数据文件打包:处理程序依赖的非Python文件
# 方法1:通过命令行参数
pyinstaller --add-data "data/*.json;data" app.py
# 方法2:在spec文件中配置
datas = [('data/*.json', 'data')]
3. UPX压缩:减小生成文件体积
# 下载UPX并配置路径
pyinstaller --upx-dir=/path/to/upx app.py
# 创建version.txt文件
file_version='1.0.0'
product_version='1.0.0'
管理员权限:需要时添加清单文件
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
chmod +x your_app
--exclude-module matplotlib
问题1:打包后程序启动慢 方案:使用--runtime-tmpdir指定临时目录
问题2:缺少动态链接库 方案:使用LD_LIBRARY_PATH(Linux)或DYLD_LIBRARY_PATH(macOS)
问题3:反病毒软件误报 方案:代码签名或提交误报报告
# 示例CI/CD集成脚本
def build_and_deploy():
# 创建虚拟环境
subprocess.run(["python", "-m", "venv", "venv"])
# 安装依赖
subprocess.run(["venv/Scripts/pip", "install", "-r", "requirements.txt"])
# 执行打包
subprocess.run([
"venv/Scripts/pyinstaller",
"--onefile",
"--windowed",
"--icon=app.ico",
"app.py"
])
建议集成自动更新机制: