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

Python3.6升级3.7+后根目录导入报错ModuleNotFoundError解决方案问询

问题根因
  • 直接运行python3.x mymain.py时,Python默认只会将mymain.py所在的this_dir目录加入模块搜索路径sys.path,不会自动把this_dir的父目录加入搜索路径,因此无法找到this_dir包本身,from this_dir import xxx类的导入就会失败。
  • Python 3.7修正了3.6及更早版本中存在的隐式相对导入 fallback 逻辑,之前版本错误兼容了子包内直接运行文件时的跨包导入写法,3.7之后就会触发明确的模块未找到报错。
修复方案

仅修改this_dir/__init__.py无法独立解决该问题:__init__.py的执行时机是Python已经成功找到this_dir包之后,报错发生时根本不会运行到__init__.py中的代码,因此单独调整该文件没有效果。

可以选择以下任意一种方案修复:

  • 方案1:调整运行命令,无需修改任何代码
    在this_dir的父目录下执行模块运行命令即可:
    python3.x -m this_dir.mymain -p1 -p2 ...
    
    该方案同时兼容和this_dir平级的其他模块的from this_dir import far导入逻辑。
  • 方案2:在mymain.py开头新增路径配置
    在所有from this_dir import xxx语句之前加入以下代码,手动将父目录加入搜索路径:
    import sys
    from pathlib import Path
    # 将this_dir的父目录加入模块搜索路径
    sys.path.insert(0, str(Path(__file__).parent.parent.resolve()))
    
    修改后可直接使用原有命令运行,也兼容平级模块的导入逻辑。
  • 方案3:修改mymain.py内的导入写法
    将from this_dir import foo类的绝对导入改成包内相对导入:
    from . import foo
    
    该方案仅需修改mymain.py内的导入语句,不会影响平级模块对this_dir的导入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:57:02