Skip to content

导入路径修改方案

复制本地路径 | 在线编辑

当前问题

  • bootstrap.pysrc/tools/
  • settings.py 也在 src/tools/
  • bootstrap.py 中有 from settings import ...
  • 执行 python src/run_capture.py 时,sys.path[0]src/ 目录
  • from settings 会在 src/ 下查找,但找不到(因为 settings.pysrc/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(相对导入)

原因

  1. 更清晰:明确表示这些模块在同一个包下
  2. 更安全:不依赖 sys.path 的设置
  3. 更标准:符合 Python 包的最佳实践

需要修改的文件

  1. 创建 tools/__init__.py

    # tools/__init__.py
    # 可以是空文件,或者添加包的说明
    

  2. 修改 bootstrap.py

    from .settings import BASE_DIR, Version
    from .updater import check_and_update
    

  3. 修改 capture/main.py

    from ..settings import CONFIGS_DIR
    from ..configParser import ConfigParser
    

  4. 其他工具文件(如果有类似的导入)

  5. import settings 改为 from ..settings import ...
  6. from configParser import ... 改为 from ..configParser import ...

注意事项

相对导入的限制

  1. 只能在包内使用
  2. run_capture.py 是入口文件,不能使用相对导入
  3. 只能使用绝对导入:from tools.bootstrap import main

  4. 需要 __init__.py

  5. tools 成为一个包
  6. 可以是空文件

混合使用

  • 入口文件run_capture.py):使用绝对导入
  • 包内文件tools/*.py):使用相对导入

实施步骤

  1. ✅ 创建 tools/__init__.py
  2. ✅ 修改 bootstrap.py 的导入
  3. ✅ 修改 capture/main.py 的导入
  4. ✅ 检查其他文件是否有类似问题
  5. ✅ 测试运行

Comments