📅  最后修改于: 2023-12-03 15:18:51.876000             🧑  作者: Mango
在Python中,我们可以通过 import 语句导入一个模块。但是当我们需要从不同的目录中导入模块时,该如何操作呢?
project/
├── main.py
├── folder1/
│ ├── __init__.py
│ └── module1.py
├── folder2/
│ ├── __init__.py
│ └── module2.py
假设我们需要在主程序 main.py
中导入 module1.py
和 module2.py
,则我们可以在 main.py
中分别使用如下语句:
from folder1.module1 import *
from folder2.module2 import *
但是,如果 folder1
和 folder2
中没有一个命名为 __init__.py
的文件,则程序会报错:ModuleNotFoundError: No module named 'folder1'
。
那么 __init__.py
文件到底是什么呢?这个文件是Python中的一个魔法文件,它使得Python将目录视为Python包,而不是普通目录。
在 __init__.py
文件中,我们可以编写初始化脚本、变量、函数等。如果目录中有多个Python脚本,我们也可以在这个文件中导入其它模块。在我们的例子中,我们需要在 folder1
和 folder2
的目录下创建一个空的 __init__.py
文件:
project/
├── main.py
├── folder1/
│ ├── __init__.py
│ └── module1.py
├── folder2/
│ ├── __init__.py
│ └── module2.py
现在我们就可以在主程序 main.py
中成功导入所有需要的模块了:
from folder1.module1 import *
from folder2.module2 import *
如果我们需要从多个不同目录中导入模块,则需要告诉Python去哪里查找这些文件。
我们可以使用全局变量 sys.path
来添加新的搜索路径。例如,如果我们需要从 path/to/folder
中导入模块,则可以使用如下语句:
import sys
sys.path.append("path/to/folder")
from module import *
这样就会将 path/to/folder
添加到搜索路径中,使得Python在导入模块时也会在这个目录中寻找。
总结一下,在Python中导入不同目录的模块有如下三种方法:
在主程序中直接使用 from folder1.module1 import *
和 from folder2.module2 import *
的方式导入。
在每个目录下创建一个空的 __init__.py
文件,然后通过 from folder1.module1 import *
和 from folder2.module2 import *
的方式导入。
使用 sys.path.append()
将需要导入的目录添加到搜索路径中(例如, sys.path.append(“path/to/folder”)
),然后使用 from module import *
的方式导入。