python - 使用项目中的包创建可执行的 Zip 存档

标签 python python-3.x python-import python-3.7 python-module

我觉得这个问题需要一个更好的标题,如果有人提出更好的建议,我会修改它。问题是我不确定我在这里使用的功能的术语。

描述我的问题的最好方法是展示我所做的事情。该项目在这里:https://github.com/jeffnyman/quendor

该项目已设置,因此可以作为模块执行。例如,从项目根目录,有人可以执行以下操作:

python3 -m quendor

我还有一个构建脚本来生成内存中的 zip(如果我正确使用该术语):

https://github.com/jeffnyman/quendor/blob/master/build.py

如果你运行 build.py 就可以了。它将生成一个 quendor.py执行整个项目的文件。直到我包含其他目录(例如我的 utilitieszinterface )之前,这一切都很好。

对于目前存储库中的项目,如果运行构建 ( .\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/

相关文章:

python - 无法正确绑定(bind)多对多字段

python - 如何让我的脚本在 Windows 上使用 python 每 30 分钟重复一次

python - 如何更改包含数字的所有字符串单元格以在 pandas 中同时 float ?

python - 将列表的 LARGE 字符串表示形式转换为列表 Python 3

python - 如何覆盖导入的 Python 模块中的常量?

python - 检查何时使用非阻塞打开发送所有数据

python - 如何在 heroku 上托管我的 discord.py 机器人?

python - 嵌套到 Python 中的动态深度

python - 在Python 3中动态导入模块时出现问题

python - 如何从同一目录中的模块导入?