【发布时间】:2022-01-16 00:24:14
【问题描述】:
我知道有一百万个类似的问题和文章描述了如何定义和管理包,但以下似乎不起作用,我已经没有东西可以尝试了。我希望我只是遗漏了一些对其他人来说完全显而易见的东西。
这是我目前的项目结构:
root-folder/
|- app/
|- cube/
|- algorithms/
|- __init__.py
|- utils.py
|- ...
|- models/
|- __init__.py
|- cube.py
|- ...
|- __init__.py
|- main.py
|- README.md
|- presentation/
|- cli_test/
|- __init__.py
|- run.py
|- unity/
|- __init__.py
|- producer.py
|- __init__.py
|- README.md
|- __init__.py
我正在尝试将 app.cube 中的main.py 中的一个函数导入 app.presentation.unity 中的producer.py,如下所示:
from app.cube.main import run
但是当我尝试运行生产者文件时,它给了我以下信息:
$ python app/presentation/unity/producer.py
Traceback (most recent call last):
File "app/presentation/unity/producer.py", line 3, in <module>
from app.cube.main import run
ModuleNotFoundError: No module named 'app'
我尝试移动文件、重命名文件夹、添加和删除__init__.py 文件,但我总是遇到类似的问题。在当前设置中,所有的 init 文件都是空的。
另外需要注意的是,在我添加 presentation 文件夹之前,cube 文件夹曾经位于项目的根目录,并且我能够在 models 和algorithms 模块并将 cube 模块中的内容导入根级别。从那时起,cube 文件夹的内容就没有改变过。这就像添加一个额外的层并不意味着工作或听起来很愚蠢。
对于一些最终信息,我在 MacOs Catalina(10.15.6) 上使用通过 pyenv 2.2.0 安装的 Python 3.8.5
解决方案!
正如本文第一条评论中所建议的那样,按如下方式运行它可以让您运行“作为脚本的库模块”,它现在对我有用!
python -m app.presentation.unity.producer
【问题讨论】:
-
您应该调用
python -m app.presentation.unity.producer,以便根据Python解释器的命令行帮助运行“库模块作为脚本”。 -
约翰,这很好用!我什至不知道我可以运行这样的东西。非常感谢!
标签: python module python-import python-module python-packaging