📜  从另一个目录导入 python 模块 - Python (1)

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

从另一个目录导入 Python 模块

有时候我们需要从另一个目录导入一个 Python 模块,例如我们有如下的目录结构:

my_project/
├── main.py
├── my_module.py
└── utils/
    └── helper.py

main.py 中,我们想要导入 helper.py,该如何做呢?

方法一:添加路径到 sys.path

我们可以将 utils 目录添加到 sys.path 中,在 main.py 中导入 helper.py,示例代码如下:

import os
import sys

# 获取当前文件的目录
dir_path = os.path.abspath(os.path.dirname(__file__))

# 将 utils 目录添加到 sys.path 中
utils_path = os.path.join(dir_path, 'utils')
sys.path.append(utils_path)

# 导入 helper 模块
import helper

这种方法比较简单,但需要手动添加路径到 sys.path 中,可能会影响到其他代码的运行。

方法二:使用相对路径

另外一种方法是使用相对路径来导入模块,示例代码如下:

from ..utils import helper

这种方式需要使用正确的相对路径,比较灵活,但有些 IDE 不支持该方式的自动补全功能。

方法三:使用 importlib

Python 3.3 引入了 importlib 模块,它提供了灵活的导入选项,示例代码如下:

import os
import importlib.util

# 获取当前文件的目录
dir_path = os.path.abspath(os.path.dirname(__file__))

# 获取 helper.py 的路径
helper_path = os.path.join(dir_path, 'utils', 'helper.py')

# 动态导入 helper 模块
spec = importlib.util.spec_from_file_location('helper', helper_path)
helper = importlib.util.module_from_spec(spec)
spec.loader.exec_module(helper)

使用 importlib 的方式可以动态导入模块,并且比较灵活,但代码量相对较多。

以上就是从另一个目录导入 Python 模块的三种方式。您可以根据实际情况选择最合适的方式来导入模块。