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

命令行、REPL导包正常,运行脚本报ModuleNotFoundError如何解决?

问题产生原因

Python执行代码时会从sys.path列出的路径中搜索要导入的模块,不同运行方式的sys.path初始化逻辑不同:

  • 你在项目根目录执行python -c命令或者开启REPL时,Python会把当前工作目录(即项目根目录) 加入sys.path,所以可以直接定位到module_1包,导入正常。
  • 你直接运行python .\module_1\test.py时,Python会把test.py脚本所在的目录(即./module_1/) 加入sys.path,而项目根目录不在搜索路径范围内,自然找不到module_1这个顶层包,抛出ModuleNotFoundError。
    补充注意:你报错信息里的导入语句写的是from module1.util import,和代码里的module_1少了下划线,如果是手误也需要先修正拼写。

解决方案

下面是几种常用的可行方案,可根据场景选择:

1. 使用-m参数以模块方式运行(最推荐)

在项目根目录下执行以下命令即可,不需要修改代码:

python -m module_1.test

这种方式Python会把当前工作目录(项目根目录)加入sys.path,完全符合包的导入逻辑。

2. 手动在test.py中添加项目根目录到搜索路径

在test.py的导入语句前加入以下代码,动态把项目根目录加入sys.path:

import sys
import os
# 拼接得到项目根目录的绝对路径,加入搜索路径
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

# 之后再执行导入就正常了
from module_1.util import f1, f2

3. 配置PYTHONPATH环境变量

把项目根目录(这里是C:\Users\X\src)加到系统的PYTHONPATH环境变量中,配置后所有Python进程都会把该路径加入搜索路径,无论在哪里运行脚本都能正常找到module_1包。
Windows临时生效可以在当前终端执行:

set PYTHONPATH=C:\Users\X\src

永久生效可以在系统环境变量设置中新增名为PYTHONPATH的变量,值为项目根目录的路径。

4. 改用相对导入(仅配合-m参数使用)

如果只在包内部使用该脚本,可以把test.py的导入语句改为相对导入:

from .util import f1, f2

修改后同样需要用python -m module_1.test的方式运行,直接运行脚本会因为顶层包执行相对导入抛出ImportError。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 02:45:03