如何打包Python zipapp使其自动以优化模式运行?
如何让zipapp打包的程序自动以优化模式运行
问题本质
zipapp 默认调用普通模式的 Python 解释器启动程序,不会自动启用 -o 优化参数。另外从 Python 3.5 开始,.pyo 格式已被废弃,优化模式由运行时参数决定,修改文件扩展名无法实现禁用断言的效果。
解决方案
方案一:用启动脚本间接调用
针对不同系统创建对应的启动脚本,通过脚本指定 -o 参数运行 zipapp:
- Windows:创建
.bat文件,内容如下:
双击该批处理文件即可启动优化模式的程序。python -o your_app.pyz - Linux/macOS:创建 shell 脚本(比如
run_app.sh),内容如下:
执行#!/bin/sh python -o your_app.pyzchmod +x run_app.sh赋予执行权限,运行该脚本即可。
方案二:在代码中自动检测并重启(无需额外脚本)
修改 src/app.py 的入口逻辑,检测当前是否处于优化模式,若未开启则自动以 -o 参数重启自身:
import sys import os def main(): assert False if __name__ == "__main__": # sys.flags.optimize >=1 对应启用了 -o 优化 if sys.flags.optimize < 1: # 获取当前 zipapp 的绝对路径 app_path = os.path.abspath(sys.argv[0]) # 用优化模式重启程序,保留原命令行参数 os.execv(sys.executable, [sys.executable, "-o", app_path] + sys.argv[1:]) main()
重新执行打包命令:
python -m zipapp src -m "app:main"
此时双击或直接运行打包后的 .pyz 文件,程序会自动切换到优化模式执行,断言会被禁用。
内容的提问来源于stack exchange,提问作者Bharel
相关产品推荐
相关产品推荐

