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

Python3.9中子目录的__init__.py是否会触发父目录__init__.py执行?

问题原因解析

这是Python的包导入规则和pytest的默认导入逻辑共同导致的:

  • 当child_directory下没有__init__.py时,Python不会将该目录识别为合法的包。你在该目录下直接执行pytest test_a.py时,pytest只会把当前执行命令的工作目录(也就是child_directory)加入模块搜索路径sys.path,导入模块时直接在当前目录下查找,完全不会触发上层parent_directory的包逻辑,因此父目录的__init__.py不会被执行,自然不会触发依赖冲突。
  • 当你给child_directory新增__init__.py后,该目录会被识别为Python的正规子包。此时pytest会自动向上追溯到整个项目的根包(也就是parent_directory),并将根包目录加入sys.path优先搜索。Python导入子包下的模块前,会先执行父级包的__init__.py,再执行当前子包的__init__.py,因此父目录__init__.py里的冲突依赖导入会被触发,直接报错。
临时解决方案(可先完成测试再处理依赖冲突)

你可以用以下两种方法绕开该问题,不影响当前测试进度:

  • 执行pytest时指定导入模式,避免触发父包逻辑,和无__init__.py时的运行逻辑完全一致:
pytest test_a.py --import-mode=append
  • 如果只是临时跑测试,也可以暂时把父目录的__init__.py重命名为其他名称(比如__init__.py.bak),测试完成后再改回原名即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 06:15:02