我有一个项目,我想这样构建:
myproject
├── api
│ ├── __init__.py
│ └── api.py
├── backend
│ ├── __init__.py
│ └── backend.py
├── models
│ ├── __init__.py
│ └── some_model.py
└── __init__.py
现在,我想在 api.py
和 backend.py
中导入模块 some_model.py
。我该如何正确地做到这一点?
我试过了:
from models import some_model
但是失败了 ModuleNotFoundError: No module named 'models'
。
我也试过:
from ..models import some_model
这给了我 ValueError: attempted relative import beyond top-level package
。
我在这里做错了什么?如何从不是子目录的不同目录导入文件?
原文由 Gasp0de 发布,翻译遵循 CC BY-SA 4.0 许可协议
首先,这个导入声明:
应该命名空间:
然后你需要得到包含
myproject
的目录,让我们称之为/path/to/parent
,进入sys.path
您可以通过设置环境变量临时执行此操作:或者,最好是,您可以通过编写一个
setup.py
文件并安装您的包来实现。遵循 PyPA 打包指南。在您编写setup.py
文件后,从同一目录中执行此命令以在sys.path
中设置正确的条目: