【python】通过修改 sys.path 来解决相对导入问题
Python 在导入模块时,会按照 sys.path
列表中的路径顺序查找模块。通过将当前脚本的父目录添加到 sys.path
,Python 就能从父目录开始查找模块,从而支持绝对导入。
示例代码
project/
├── utils/
│ ├── logger_manager.py # 包含 LogRecord 类
│ └── redis_manager.py # 当前报错的文件
└── main.py
在 redis_manager.py
中添加以下代码:
# redis_manager.py
import sys
from pathlib import Path
# 获取当前脚本的父目录(即 utils 目录的父目录,也就是 project/)
parent_dir = str(Path(__file__).resolve().parent.parent)
# 将父目录添加到 sys.path
sys.path.append(parent_dir)
# 现在可以使用绝对导入,从项目根目录开始查找模块
from utils.logger_manager import LogRecord
# 后续代码保持不变...
代码解释
sys
:用于访问 Python 解释器的系统参数,包括sys.path
。Path
:来自pathlib
模块,用于处理文件路径,比传统的字符串路径更安全、更简洁。
Path(__file__)
:获取当前脚本(redis_manager.py
)的路径对象。.resolve()
:将路径解析为绝对路径。.parent.parent
:获取父目录的父目录(即project/
)。str(...)
:将路径对象转换为字符串。
sys.path.append(parent_dir)
:将父目录添加到模块搜索路径的末尾。
from utils.logger_manager import LogRecord
:直接从utils
包导入模块,Python 会在sys.path
中找到project/
目录。
常见问题
适用场景
THE END
0
二维码
打赏
海报


【python】通过修改 sys.path 来解决相对导入问题
Python 在导入模块时,会按照 sys.path 列表中的路径顺序查找模块。通过将当前脚本的父目录添加到 sys.path,Python 就能从父目录开始查找模块,从而支持绝对……

共有 0 条评论