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

Python运行上级目录脚本时同目录模块导入失败如何解决

问题原因

该错误是Python模块搜索路径逻辑导致的,你添加空__init__.py仅能将pkg标记为Python可识别的包,无法解决路径搜索问题:

  • 运行test.py时,Python会默认将test.py所在的test/目录加入模块搜索路径sys.path,不会自动将test/pkg/目录加入搜索列表
  • p1.py中写import p2时,Python只会在sys.path包含的所有目录下查找名为p2的模块,自然找不到存放在pkg目录下的p2.py,就会抛出ModuleNotFoundError
可用解决方法

推荐按优先级选择以下方案:

  • 方案1:包内使用相对导入
    将p1.py中的import p2修改为from . import p2即可。该写法明确告诉Python从当前模块所属的包的同级目录查找p2,不需要依赖全局搜索路径,是包内模块互相导入的标准实现。
  • 方案2:使用基于根包的绝对导入
    将p1.py中的import p2修改为import pkg.p2,同时将调用语句修改为pkg.p2.print_p2()。因为运行test.py时test/目录在搜索路径中,pkg是可识别的根包,按完整包路径导入即可正常定位到p2模块。
  • 方案3:手动添加路径(仅兜底使用,不推荐)
    如果不方便修改包内导入逻辑,可以在test.py的最开头添加以下代码,手动将pkg目录加入搜索路径:
import sys
import os
sys.path.append(os.path.join(os.path.dirname(__file__), 'pkg'))

该方案硬编码了路径逻辑,项目迁移或目录结构调整时容易失效,仅做临时兜底使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:15:03