如何从其他文件夹导入模块



我有一个我想这样构建的项目:

myproject
├── api
│   ├── __init__.py
│   └── api.py
├── backend
│   ├── __init__.py
│   └── backend.py
├── models
│   ├── __init__.py
│   └── some_model.py
└── __init__.py

现在,我想在api.pybackend.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

我在这里做错了什么?如何从其他目录导入文件,这不是子目录?

首先,此导入语句:

from models import some_model

应该是名称:

# in myproject/backend/backend.py or myproject/api/api.py
from myproject.models import some_model

然后,您需要获取包含myproject的目录,我们将此/path/to/parent称为sys.path列表。您可以通过设置环境变量来暂时执行此操作:

export PYTHONPATH=/path/to/parent

或最好,您可以通过编写setup.py文件并安装软件包来做到这一点。遵循PYPA包装指南。编写setup.py文件后,从同一目录中,执行此文件以在sys.path中设置正确的条目:

pip install --editable .

不幸的是,python只有在您的文件在系统路径中时才能找到您的文件。但是不要害怕!有一种解决方法!

使用Python的sys模块,我们可以在Python运行时向路径添加一个目录,一旦Python停止运行,它将从路径中删除。

您可以通过:

做到这一点
import sys
sys.path.insert(0, '/path/to/application/app/folder')
import [file]

重要的是在导入文件之前导入并设置目录路径。

祝你好运!

乔丹。

我会列出两种方法:

只需通过绝对导入导入some_model

from myproject.models import some_model

请注意,myproject应视为模块(即具有__init__.py(


您可以将上一个路径添加到我在这种并行级别模块中使用的sys.path

import sys
sys.path.append('../')
from models import some_model

相关内容

  • 没有找到相关文章

最新更新