📜  Python - 从不同目录导入模块(1)

📅  最后修改于: 2023-12-03 15:18:51.876000             🧑  作者: Mango

Python - 从不同目录导入模块

在Python中,我们可以通过 import 语句导入一个模块。但是当我们需要从不同的目录中导入模块时,该如何操作呢?

假设有如下目录结构:
project/
├── main.py
├── folder1/
│   ├── __init__.py
│   └── module1.py
├── folder2/
│   ├── __init__.py
│   └── module2.py
主程序 main.py

假设我们需要在主程序 main.py 中导入 module1.pymodule2.py,则我们可以在 main.py 中分别使用如下语句:

from folder1.module1 import *
from folder2.module2 import *
init.py

但是,如果 folder1folder2 中没有一个命名为 __init__.py 的文件,则程序会报错:ModuleNotFoundError: No module named 'folder1'

那么 __init__.py 文件到底是什么呢?这个文件是Python中的一个魔法文件,它使得Python将目录视为Python包,而不是普通目录。

__init__.py 文件中,我们可以编写初始化脚本、变量、函数等。如果目录中有多个Python脚本,我们也可以在这个文件中导入其它模块。在我们的例子中,我们需要在 folder1folder2 的目录下创建一个空的 __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 *
使用 sys.path.append()

如果我们需要从多个不同目录中导入模块,则需要告诉Python去哪里查找这些文件。

我们可以使用全局变量 sys.path 来添加新的搜索路径。例如,如果我们需要从 path/to/folder 中导入模块,则可以使用如下语句:

import sys

sys.path.append("path/to/folder")

from module import *

这样就会将 path/to/folder 添加到搜索路径中,使得Python在导入模块时也会在这个目录中寻找。

总结一下,在Python中导入不同目录的模块有如下三种方法:

  1. 在主程序中直接使用 from folder1.module1 import *from folder2.module2 import * 的方式导入。

  2. 在每个目录下创建一个空的 __init__.py 文件,然后通过 from folder1.module1 import *from folder2.module2 import * 的方式导入。

  3. 使用 sys.path.append() 将需要导入的目录添加到搜索路径中(例如, sys.path.append(“path/to/folder”) ),然后使用 from module import * 的方式导入。