📅  最后修改于: 2023-12-03 15:21:56.444000             🧑  作者: Mango
有时候我们需要从另一个目录导入一个 Python 模块,例如我们有如下的目录结构:
my_project/
├── main.py
├── my_module.py
└── utils/
└── helper.py
在 main.py
中,我们想要导入 helper.py
,该如何做呢?
我们可以将 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 不支持该方式的自动补全功能。
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 模块的三种方式。您可以根据实际情况选择最合适的方式来导入模块。