Python学习笔记-Zipapp打包可执行文件
使用场景:只需要项目所需指定版本的Python解释器就可以运行由zipapp打包后的项目
环境要求
打包方:需要有项目及项目所依赖的所有开发环境(Python解释器,第三方库)
使用方:需要有项目所需指定版本的Python解释器
官方文档:https://docs.python.org/zh-cn/3/library/zipapp.html#zipapp-specifying-the-interpreter
概念#
zipapp会将项目打包为一个独立的可执行文件,可在任何装有合适解释器的机器上运行
例子#
-
创建目录
myapp
-
下载依赖到
myapp
目录中python -m pip install flask --target myapp -
创建文件
testapp.py
,将文件放入myapp
目录中# encoding:utf8 from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello World!" def main(): app.run() -
打包
# 方式一 # 参数解释 # -o 输出文件名称,文件名称必须有pyz后缀 # -c 利用 deflate 方法压缩文件,减少输出文件的大小,默认不压缩 # -m 指定调用对象,模块中的方法mod:function,如果是多层级,则是pkg.mod:function # -p 指定解释器,尽量避免使用具体版本的Python解释器,如python3.6,若打包的可执行文件需要在liunx中执行,则必须指定,参考 `/usr/bin/python` python -m zipapp myapp -o app.pyz -c -m "testapp:main" # 方式二 import zipapp zipapp.create_archive('myapp', 'app.pyz') -
运行方式
# 方式一 python app.pyz # 方式二 在配置python解释器环境变量后,windows上可以直接双击运行
注意事项#
如果应用程序依赖某个带有 C 扩展的包,则此程序包无法由打包文件运行(这是操作系统的限制,因为可执行代码必须存在于文件系统中,操作系统才能加载)。这时可去除打包文件中的依赖关系,然后要求用户事先安装好该程序包,或者与打包文件一起发布并在 __main__.py
中增加代码,将未打包模块的目录加入 sys.path
中。采用增加代码方式时,一定要为目标架构提供合适的二进制文件(可能还需在运行时根据用户的机器选择正确的版本加入 sys.path
)。
总结#
zipapp 在部分场景下降低了项目迁移及运行的难度,适合在有合适解释器的大部分机器上使用
本文来自博客园,作者:Jruing,转载请注明原文链接:https://www.cnblogs.com/jruing/p/18542249
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!