导入路径修改方案
复制本地路径 | 在线编辑
当前问题
bootstrap.py在src/tools/下settings.py也在src/tools/下bootstrap.py中有from settings import ...- 执行
python src/run_capture.py时,sys.path[0]是src/目录 from settings会在src/下查找,但找不到(因为settings.py在src/tools/下)
解决方案
方案 1:使用相对导入(推荐)⭐
优点:
- ✅ 明确表示它们在同一个包下
- ✅ 不依赖
sys.path - ✅ 更符合 Python 包的设计理念
修改方式:
# bootstrap.py
from .settings import BASE_DIR, Version
from .updater import check_and_update
要求:
- 需要创建
tools/__init__.py(让tools成为一个包) - 相对导入只能在包内使用
方案 2:使用绝对导入
优点:
- ✅ 简单直接
- ✅ 不需要
__init__.py(但建议有)
修改方式:
# bootstrap.py
from tools.settings import BASE_DIR, Version
from tools.updater import check_and_update
原理:
- 因为
src/在sys.path中 from tools.settings会在src/tools/settings.py中查找 ✅
推荐方案:方案 1(相对导入)
原因
- 更清晰:明确表示这些模块在同一个包下
- 更安全:不依赖
sys.path的设置 - 更标准:符合 Python 包的最佳实践
需要修改的文件
-
创建
tools/__init__.py
# tools/__init__.py # 可以是空文件,或者添加包的说明 -
修改
bootstrap.py
from .settings import BASE_DIR, Version from .updater import check_and_update -
修改
capture/main.py
from ..settings import CONFIGS_DIR from ..configParser import ConfigParser -
其他工具文件(如果有类似的导入)
- 将
import settings改为from ..settings import ... - 将
from configParser import ...改为from ..configParser import ...
注意事项
相对导入的限制
- 只能在包内使用
run_capture.py是入口文件,不能使用相对导入-
只能使用绝对导入:
from tools.bootstrap import main -
需要
__init__.py - 让
tools成为一个包 - 可以是空文件
混合使用
- 入口文件(
run_capture.py):使用绝对导入 - 包内文件(
tools/*.py):使用相对导入
实施步骤
- ✅ 创建
tools/__init__.py - ✅ 修改
bootstrap.py的导入 - ✅ 修改
capture/main.py的导入 - ✅ 检查其他文件是否有类似问题
- ✅ 测试运行