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. 其他工具文件(如果有类似的导入)

    • import settings 改为 from ..settings import ...
    • from configParser import ... 改为 from ..configParser import ...

注意事项

相对导入的限制

  1. 只能在包内使用

    • run_capture.py 是入口文件,不能使用相对导入
    • 只能使用绝对导入:from tools.bootstrap import main
  2. 需要 __init__.py

    • tools 成为一个包
    • 可以是空文件

混合使用

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

实施步骤

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

Comments