Python导入同目录functionsList.py内函数报ModuleNotFoundError怎么办
同路径Python模块导入报错ModuleNotFoundError原因及解决方案
核心原因
Python导入模块时会按照sys.path列表中的路径顺序依次查找模块,出现该报错是因为functionsList.py所在的目录没有被加入到sys.path的扫描范围中,Python扫描完所有路径都找不到对应模块才会抛出错误,而非特意去第三方库中查找。你提前导入sys模块本身不会影响导入逻辑,只有修改sys.path的操作才会改变模块查找顺序。
常见触发原因
- 两个文件实际路径不匹配:你认为的「同路径」和实际存储路径不一致,比如
functionsList.py被放在了子文件夹中,或者存在拼写、大小写差异(Linux/macOS系统对文件名大小写敏感,FunctionsList.py和functionsList.py会被识别为两个不同文件)。 - 运行脚本时工作目录错误:你在终端运行脚本时,当前工作目录不是脚本所在的目录。比如两个文件都存放在
/project/py/路径下,你在/project/路径下执行python py/你的脚本名.py,此时Python的工作目录是/project/,不会扫描/project/py/路径下的本地文件。 sys.path被修改:如果你导入sys后执行过sys.path.append、sys.path.insert操作,将其他路径的优先级提到了脚本所在目录之前,也会导致Python优先扫描其他路径,找不到对应模块。
解决方法
临时修复(单次运行生效)
- 运行脚本前先切换到脚本所在的目录,再执行运行命令,比如两个文件都放在
D:\pythonCode\下,终端先执行cd D:\pythonCode,再运行你的脚本文件。 - 在导入
functionsList前,手动将当前脚本所在目录加到sys.path最前面,保证优先扫描该路径:
import sys import os # 将当前脚本所在目录加入sys.path的最高优先级位置 sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) from functionsList import function1, function2
永久修复(项目级生效)
- 将你的项目根目录加入系统的
PYTHONPATH环境变量,之后所有Python进程都会自动扫描该目录下的模块。 - 按照Python项目规范组织代码,在项目根目录、各子目录下添加空的
__init__.py文件声明为Python包,之后使用规范的相对导入/绝对导入语法引入模块。
内容的提问来源于stack exchange,提问作者beginner_python
相关产品推荐
相关产品推荐

