我知道有一百万个类似的问题和文章描述了如何定义和管理包,但以下内容似乎不起作用,我已经没有什么可尝试的了。我希望我只是错过了一些对别人来说完全显而易见的东西。
这是我目前的项目结构:
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
文件夹的内容一直没有更改。这就像增加一个额外的层是不起作用的,或者听起来很愚蠢的东西。
对于一些最终信息,我使用Python 3.8.5通过pyenv 2.2.0安装在MacOs Catalina(10.15.6(上
解决方案
正如这篇文章的第一条评论中所建议的那样,按照以下方式运行它可以让你运行一个";库模块作为脚本";,现在它对我有效!
python -m app.presentation.unity.producer
试试这个-
import sys
sys.path.insert(1, '/root-folder/app/cube')
from main import run