You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需修改路径的Python相对导入问题求解

问题解析与解决方案

为什么两种导入方式都失败?

  • 绝对导入失败(from code import moduleA):直接运行test1.py时,Python会把test1.py所在的tests目录加入模块搜索路径(sys.path),但code目录在src下,不在搜索路径范围内,因此找不到code模块。
  • 相对导入失败(from ..code import moduleA):直接运行test1.py时,它会被当作顶层脚本(__name__为__main__),Python不会将其视为src包的子模块,自然无法识别相对导入中..对应的父包结构。

正确的导入方式(无需修改路径/额外函数)

要让导入生效,需将src当作Python包,从src的父目录以模块模式运行测试脚本:

1. 确认项目目录结构(假设项目根目录为myproject)

myproject/
    src/
        tests/
            test1.py
        code/
            __init__.py
            moduleA.py
            moduleB.py

2. 在test1.py中使用任一导入语句

  • 相对导入写法:
from ..code import moduleA
moduleA.my_function(1)
  • 绝对导入写法:
from src.code import moduleA
moduleA.my_function(1)

3. 从项目根目录myproject执行脚本

运行命令:

python -m src.tests.test1

这种运行方式会把myproject目录加入sys.path,并将test1.py作为src.tests包的子模块加载,此时相对导入的父包、绝对导入的src模块都能被正常识别。

内容的提问来源于stack exchange,提问作者freestatelabs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 21:40:27