📅  最后修改于: 2023-12-03 14:46:12.008000             🧑  作者: Mango
在 Python 中,我们经常需要在项目中从不同的目录中导入模块或文件,比如从上级目录中导入模块或文件、从其他模块中导入模块或文件等等。本文将介绍如何在 Python 中从不同目录导入文件。
相对导入使用相对路径从当前目录导入模块或文件,使用相对导入可以避免由于不同操作系统的路径差异导致的问题。
举个例子,假设我们有以下的文件结构:
project/
├── app/
│ ├── __init__.py
│ └── main.py
├── tasks/
│ ├── __init__.py
│ └── task.py
└── utils/
├── __init__.py
└── util.py
我们需要在 main.py
中导入 task.py
,并在 task.py
中导入 util.py
,那么可以使用相对导入,代码如下:
# main.py
from ..tasks import task
# task.py
from ..utils import util
注意事项:
.
或 ..
开头。sys.path 是 Python 解释器的搜索路径,它是一个列表,存储每个搜索路径。因此,我们可以通过修改 sys.path 列表,添加需要搜索的路径,以便在不同的目录中导入模块或文件。
举个例子,假设我们有以下的文件结构:
project/
├── app/
│ ├── __init__.py
│ └── main.py
├── tasks/
│ ├── __init__.py
│ └── task.py
└── utils/
├── __init__.py
└── util.py
我们需要在 main.py
中导入 task.py
,并在 task.py
中导入 util.py
,如果不想使用相对导入,可以像下面这样修改 sys.path 列表:
# main.py
import sys
sys.path.append('../tasks')
from task import Task
# task.py
import sys
sys.path.append('../utils')
from util import Util
注意事项:
当我们在 Python 中导入模块或文件时,会先在当前目录中查找对应的模块或文件,如果没有找到,则会到 sys.path 中查找。因此,我们可以通过将不同目录下的文件打包成一个 package 来解决问题。
举个例子,假设我们有以下的文件结构:
project/
├── app/
│ ├── __init__.py
│ └── main.py
├── tasks/
│ ├── __init__.py
│ └── task.py
└── utils/
├── __init__.py
└── util.py
我们可以将 tasks
和 utils
目录下的文件打包成一个 package ,如下:
project/
├── app/
│ ├── __init__.py
│ └── main.py
├── mypackage/
│ ├── __init__.py
│ ├── tasks/
│ │ ├── __init__.py
│ │ └── task.py
│ └── utils/
│ ├── __init__.py
│ └── util.py
然后在 main.py
中导入 Task
类,代码如下:
# main.py
from mypackage.tasks import Task
task = Task()
task.run()
在 task.py
中导入 Util
类同理。
注意事项: