如何在python中正确地将相邻包导入当前包



我知道有一百万个类似的问题和文章描述了如何定义和管理包,但以下内容似乎不起作用,我已经没有什么可尝试的了。我希望我只是错过了一些对别人来说完全显而易见的东西。

这是我目前的项目结构:

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文件夹曾经位于项目的根级别,并且我能够在modelsalgorithms模块之间双向导入函数和类,还可以将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

相关内容

  • 没有找到相关文章

最新更新