如何执行zip格式的python包

Dan*_*Dan 2 python python-packaging

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

\n\n

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

\n\n

目录树

\n\n
pkgtest/\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 pkga\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 __main__.py\n
Run Code Online (Sandbox Code Playgroud)\n\n

__main__.py

\n\n
print("SADASD")\n
Run Code Online (Sandbox Code Playgroud)\n\n

__init__.py:空

\n\n

此时,我可以这样做:

\n\n
python pkga\n
Run Code Online (Sandbox Code Playgroud)\n\n

它有效,但如果我运行以下命令:

\n\n
python -m zipfile -c pkga.zip pkga   # This generates a pkga.zip file\npython pkga.zip\n
Run Code Online (Sandbox Code Playgroud)\n\n

我收到以下错误:

\n\n

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

\n\n

我缺少什么?

\n\n

编辑

\n\n

这样做:

\n\n
python3 -m zipapp pkga\n
Run Code Online (Sandbox Code Playgroud)\n\n

进而

\n\n
python3 pkga.pyz\n
Run Code Online (Sandbox Code Playgroud)\n\n

有用。

\n\n

但是,根据本教程,使用普通的 zip 文件就足够了。它是否正确?

\n

Ste*_*tef 5

__main__.py文件必须位于 zip 文件的顶级目录中,请参见此处

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

你必须跑

python -m zipfile -c ../pkga.zip .
Run Code Online (Sandbox Code Playgroud)

从 pkga 目录内部。当你运行时,python -m zipfile -c pkga.zip pkga你会创建一个带有目录 pkga 的 zip 文件,其中包含文件,但 python__main__.py在 zip 文件的顶层目录中查找。