首页 > 解决方案 > 如何将 python 模块捆绑到单个 [可执行] zip 存档中?

问题描述

自从我编写任何严肃的python代码以来已经有一段时间了,所以我确定我只是错过了一些愚蠢的东西......

我已经编写了几个模块,并希望将它们捆绑到一个可执行的 zip 存档中。我似乎记得这是一个相对微不足道的过程,并认为我已经让它工作了,但是在添加了一些内容、重命名目录/文件等之后。我无法对稳定的错误浪潮做出正面或反面。

在研究这个问题时,我遇到了一些使用前言 Cheeseshop ( pip) 、py2exepy2app等进行打包的热门话题。但是,我无意在线重新分发我的代码,也不一定需要捆绑整个 python 环境。

将我的模块捆绑到单个跨平台(主要是 unix/linux/mac 环境)可执行文件中的最简单和最简单的方法是什么?

示例结构:

ProjectRoot
    |_ sub_dir
        |_ __init__.py # empty file
        |_ module1.py
        |_ module2.py
    |_ __main__.py

内容__main__.py

import sub_dir.module1 as sss
sss.main()

我试图创建一个 zip 存档,ProjectRoot但是在执行存档时,我得到以下信息:

$ python ./ProjectRoot.zip
/usr/local/opt/python/bin/python3.7: can't find '__main__' module in './ProjectRoot.zip'    

我究竟做错了什么?

标签: pythonpackagebundle

解决方案


尝试使用该zipapp模块:

$ python -m zipapp myapp -m "myapp:main"
$ python myapp.pyz

https://docs.python.org/3/library/zipapp.html


推荐阅读