【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 条评论