【问题标题】:How to execute a python package in zip format如何以 zip 格式执行 python 包
【发布时间】:2020-09-22 05:11:06
【问题描述】:

我想创建一个python zipfile 并执行它。

我要做的是,首先,创建以下目录和源文件:

目录树

pkgtest/
└── pkga
    ├── __init__.py
    └── __main__.py

__main__.py

print("SADASD")

__init__.py:空

此时,我可以做到:

python pkga

它可以工作,但是如果我运行以下命令:

python -m zipfile -c pkga.zip pkga   # This generates a pkga.zip file
python pkga.zip

我得到以下错误:

/usr/bin/python: can't find '__main__' module in 'pkga.zip'

我错过了什么?

编辑

这样做:

python3 -m zipapp pkga

然后

python3 pkga.pyz

它有效。

但是,根据this tutorial 的说法,使用普通的 zip 文件就足够了。这是正确的吗?

【问题讨论】:

  • 只是为了确保:python -m zipfile -l pkga.zip 确认两个文件都在 zip 文件中?
  • @Stef 是的,确实如此

标签: python python-packaging


【解决方案1】:

__main__.py 文件必须在 zip 文件的顶级目录中,请参阅here

(例如,包含顶级 __main__.py 文件的 zip 文件)。

你必须跑

python -m zipfile -c ../pkga.zip .

从 pkga 目录中。当您运行 python -m zipfile -c pkga.zip pkga 时,您会创建一个包含目录 pkga 的 zip 文件,其中包含文件,但 python 在 zip 文件的顶级目录中查找 __main__.py

【讨论】:

    【解决方案2】:

    使用 zipapp 模块创建 ZIP 存档。

    python -m zipapp pkga
    python pkga.pyz
    

    .pyz 文件是一个 ZIP 存档。

    【讨论】:

      猜你喜欢
      • 2016-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-03
      • 1970-01-01
      • 2015-10-29
      • 1970-01-01
      • 2021-05-16
      相关资源
      最近更新 更多