如何从不同的文件夹导入模块?
How to import a module from a different folder?
我有一个项目,我想这样构建:
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
.
我在这里做错了什么?如何从不是子目录的不同目录导入文件?
首先,这个导入语句:
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]
然而,在导入文件之前导入 sys 并设置目录路径很重要。
祝你好运!
约旦。
我会列出两种方法:
通过绝对导入简单地导入some_model
:
from myproject.models import some_model
请注意 myproject
应被视为一个模块(即具有 __init__.py
)
或
您可以将之前的路径添加到我在此类并行级别模块中使用的sys.path
:
import sys
sys.path.append('../')
from models import some_model
我有一个项目,我想这样构建:
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
.
我在这里做错了什么?如何从不是子目录的不同目录导入文件?
首先,这个导入语句:
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]
然而,在导入文件之前导入 sys 并设置目录路径很重要。
祝你好运!
约旦。
我会列出两种方法:
通过绝对导入简单地导入some_model
:
from myproject.models import some_model
请注意 myproject
应被视为一个模块(即具有 __init__.py
)
或
您可以将之前的路径添加到我在此类并行级别模块中使用的sys.path
:
import sys
sys.path.append('../')
from models import some_model