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

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

本文介绍在 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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。