Python子文件夹测试脚本导入父目录模块相对导入报错问题咨询
问题原因
你遇到的
attempted relative import with no known parent package报错核心原因是:直接运行单个Python脚本(python testScript.py)时,Python会将脚本所在的testFolder目录作为顶级工作目录,不会识别上层的importTest包结构,哪怕存在__init__.py也无法触发相对导入的包识别规则。同时你当前的相对导入语法也有误。
修复方案
方法1:以模块形式运行脚本(推荐,无需修改代码路径逻辑)
- 先修改
testScript.py中的导入语句,修正相对导入语法:
# 两个点代表定位到当前文件的父目录(即importTest目录),直接导入该目录下的tobeimported模块 from ..tobeimported import ToBeImported def runTest(): item = ToBeImported() if __name__ == '__main__': runTest()
- 切换终端工作目录到
importTest的上层文件夹,执行以下命令运行脚本:python -m importTest.testFolder.testScript
这种方式会让Python自动按照包结构加载模块,相对导入可正常生效。
方法2:动态添加父目录到模块搜索路径(适合直接运行单个脚本的场景)
不需要用相对导入,直接在testScript.py开头添加路径配置代码:
import sys from pathlib import Path # 将当前文件的父目录的父目录(即importTest目录)加入Python模块搜索路径 sys.path.append(str(Path(__file__).parent.parent.resolve())) # 直接导入模块即可 from tobeimported import ToBeImported def runTest(): item = ToBeImported() if __name__ == '__main__': runTest()
修改完成后直接在testFolder目录下运行python testScript.py即可正常执行。
方法3:使用测试框架(适合项目级测试场景)
如果是项目测试用途,直接用pytest等测试框架,框架会自动将项目根目录加入模块搜索路径,你只需要将导入语句写为:from importTest.tobeimported import ToBeImported
之后直接在项目根目录运行pytest命令即可自动识别并运行测试脚本,不需要额外处理路径配置。
内容的提问来源于stack exchange,提问作者DrDonut
相关产品推荐
相关产品推荐

