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

Python 3.7.0绝对导入失效,运行foo6时报ModuleNotFoundError无foo模块错误

错误原因

你当前把C:\Users\priper\Desktop\dumdum\foo加入了sys.path,而你用from foo.foo1 import ...的语法导入时,Python会遍历sys.path下的所有目录,查找是否存在名为foo的子目录/包。你加入sys.path的foo目录下只有__init__.py、foo1.py、foo6.py三个文件,没有叫foo的子目录,自然找不到foo模块,触发报错。

兼容两种运行场景的修复方案

你需要foo6既可以作为独立脚本运行,也可以被dumdum根目录下的模块正常导入,按以下步骤修改foo6.py即可:

  • 修正sys.path添加逻辑:把项目根目录dumdum加入sys.path,而非foo子目录,这样Python才能定位到foo包
  • 适配两种场景的导入写法:用分支判断区分「作为主脚本运行」和「被外部模块导入」两种情况,分别使用对应的导入语法

修改后的foo6.py完整代码如下:

import sys
from pathlib import Path

if __name__ == "__main__":
    # 作为主脚本运行时,把dumdum根目录加入sys.path
    # __file__的父目录是foo,父目录的父目录就是dumdum
    sys.path.append(str(Path(__file__).parent.parent.resolve()))
    from foo.foo1 import printy, printing_mystr
    
    # 原有业务逻辑
    print(__name__)
    printing_mystr("Oh I am a string passed into foo_1")
else:
    # 被外部模块导入时,使用相对导入
    from .foo1 import printy, printing_mystr
验证方法
  • 单独运行foo6:直接执行python foo6.py,可正常输出结果
  • 被根目录模块调用:在dumdum目录下新建测试文件main.py,写入from foo.foo6 import printing_mystr,执行python main.py可正常导入调用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:09:13