Python 导入上级目录及子模块的两种实现方式

闻溪
闻溪
发布时间:2026-10-14 | 3人浏览过
原创

本文介绍在 Python 中如何从子目录或上级目录导入模块。主要包含两种方法:一是通过创建空的 __init__.py 文件将目录转换为包,二是利用 sys.path 动态添加路径。针对 Python 3.6.7 以上版本可能出现的导入失效问题,提供了一种基于 os.walk 递归遍历目录并扩展 sys.path 的解决方案,确保跨目录模块引用的稳定性。

Python 跨目录模块导入场景

在实际开发中,经常需要从不同路径下的 Python 文件导入模块。以特定的目录结构为例,假设我们需要在 _train.py 文件中,分别导入位于 networks 目录下的 _lstm.py 模块,以及位于上级目录的 _config.py 配置文件。


_config.py
networks
	_lstm.py
	_cnn.py
pipelines 
	_train.py

标准导入方法:包初始化与路径添加

实现这一需求只需执行两个基本步骤。

第一步,在 networks 文件夹内创建一个名为 __init__.py 的空文件。这一步骤至关重要,因为它将该目录标识为一个 Python 包,从而允许内部模块被正确识别和导入。


_config.py
networks
	_lstm.py
	_cnn.py
pipelines 
	_train.py

第二步,利用 sys 库动态修改系统路径。通过向 sys.path 添加上级目录路径,使得解释器能够找到并加载所需的模块文件。


# _train.py
import sys
sys.path.append("..") # 这句是为了导入_config
from networks._lstm import *
from _config import *

Python 3.6.7+ 版本的兼容解决方案

补充说明与更新。

部分用户反馈,在 Python 3.6.7 及以上版本中,上述简单添加路径的方法可能会失效。为此,提供一种虽然不够优雅但更为稳健的解决方案:其核心逻辑是递归遍历当前目录下的所有子文件夹,并将这些路径全部添加到 sys.path 中,以确保模块引用的完整性。

完整的测试代码示例已托管于 https://github.com/SongDark/Import_Test,供读者参考验证。


# _train.py
import sys, os
sys.path.append("..")
sys.path.extend([os.path.join(root, name) for root, dirs, _ in os.walk("../") for name in dirs])
 

至此,关于 Python 导入上级目录及相关模块的方法已介绍完毕。如需了解更多相关内容,建议查阅本站过往文章或继续浏览后续技术分享,感谢支持。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表