我觉得这个问题需要一个更好的标题,如果有人提出更好的建议,我会修改它。问题是我不确定我在这里使用的功能的术语。
描述我的问题的最好方法是展示我所做的事情。该项目在这里:https://github.com/jeffnyman/quendor
该项目已设置,因此可以作为模块执行。例如,从项目根目录,有人可以执行以下操作:
python3 -m quendor
我还有一个构建脚本来生成内存中的 zip(如果我正确使用该术语):
https://github.com/jeffnyman/quendor/blob/master/build.py
如果你运行 build.py
就可以了。它将生成一个 quendor.py
执行整个项目的文件。直到我包含其他目录(例如我的 utilities
和 zinterface
)之前,这一切都很好。
对于目前存储库中的项目,如果运行构建 ( .\build.py
),然后运行生成的文件:
./quendor.py
您收到以下错误:
File "./quendor.py/quendor/__main__.py", line 6, in <module>
ModuleNotFoundError: No module named 'quendor.zinterface'
所以一个关键点:如果我的所有文件都位于同一目录中(即在 quendor
中),则此构建脚本在生成可执行脚本文件方面可以正常工作。
但是一旦我将子目录和文件包含在这些目录中,事情就会因上述错误而出问题。
我确定所有文件都已收集完毕。我从第 18 行 ( https://github.com/jeffnyman/quendor/blob/master/build.py#L18 ) 开始处理。如果您要将此语句添加到第 24 行:
print(f"* {file_path}")
您会看到它输出以下内容:
* quendor/__init__.py
* quendor/__version__.py
* quendor/zinterface/fileio.py
* quendor/utilities/messages.py
* quendor/__main__.py
所以我怀疑这可能与我在第 28 行( https://github.com/jeffnyman/quendor/blob/master/build.py#L28 )写入字符串的代码有关。我觉得我必须做更多的事情来让可执行的压缩脚本文件了解模块。
但我不确定(1)我是否准确,以及(2)即使我准确,如果可能的话。我发现我有点不知所措。
如有任何想法,我们将不胜感激,我很乐意更新任何必要的澄清或术语。
最佳答案
所以它不会让我发表评论,除非我有更多的声誉,但我可以发布答案。尽管我没有答案,但只是发表评论。我认为上述评论并不适合您的实际__main__.py
文件,而是在 quendor.py
中生成的文件文件。您可能想尝试将导入语句添加到您编写的打包字符串中。
例如,看看如果在第 32 行添加以下内容会发生什么:import quendor.zinterface.fileio as zio
。 (不要替换那里的行。只需放置我的行,然后保留其他行。)我不确定 zip 过程如何工作,但它是否尝试镜像应该工作的模块过程。但是,如果不这样做,那就行不通。您可能也只是想尝试做 import quendor.zinterface
。就其本身而言,这是行不通的,但看看它是否会给出不同的错误会很有趣。
关于python - 使用项目中的包创建可执行的 Zip 存档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56203190/