Python中导入自定义模块`from abstest import my_abs`失败的原因及解决方法
自定义 my_abs 函数的文件后保存成 abstest 的 py 文件(名字没有.py )
然后在交互模式下输入 from abstest import my_abs
显示
ModuleNotFoundError: No module named ‘abstest’
求大神解答
Python中导入自定义模块from abstest import my_abs失败的原因及解决方法
帖子标题里说的from abstest import my_abs导入失败,这问题我太熟了。核心原因就一个:Python解释器找不到你的abstest模块。下面我直接给你上几种最常见的情况和对应的代码解决方案。
情况1:你的abstest.py文件根本不在Python的搜索路径里。
这是最可能的原因。Python只在几个固定目录(比如当前目录、site-packages)里找模块。假设你的项目结构是这样的:
my_project/
├── main.py
└── my_module/
└── abstest.py
你在main.py里直接写from abstest import my_abs肯定报ModuleNotFoundError。因为abstest.py在子目录my_module里。
解决方法A:用相对导入(推荐用于包内调用)
把abstest.py变成一个包的一部分。在my_module目录里创建一个空的__init__.py文件,然后:
# 在 main.py 中
from my_module.abstest import my_abs
解决方法B:直接修改系统路径(快速调试用)
在导入前,把模块所在目录加到sys.path里:
import sys
sys.path.insert(0, '/完整/路径/my_project/my_module')
from abstest import my_abs
情况2:文件名或模块名冲突。
如果你自己写了个abstest.py,但系统里已经有一个叫abstest的库(比如你pip install abstest过),或者你当前目录有abstest.pyc缓存文件出问题了,也会导致导入混乱。
解决方法:
- 检查你的文件名是不是和内置或第三方模块重名了,换个名字。
- 删除项目目录下的所有
__pycache__文件夹和.pyc文件,然后重启Python解释器。
情况3:代码本身有语法错误。
你的abstest.py文件本身写错了,比如my_abs函数没定义。Python在导入时会执行模块代码,如果有语法错误,导入就会失败。
解决方法:
先单独运行一下abstest.py,确保它自己没问题。比如abstest.py内容应该是:
# abstest.py
def my_abs(x):
if x >= 0:
return x
else:
return -x
# 可以加个测试
if __name__ == '__main__':
print(my_abs(-5))
总结一下排查步骤:
- 先定位:在Python交互环境里跑
import sys; print(sys.path),看看你的模块目录在不在输出的路径列表里。 - 再检查:确认你的模块文件名是
.py结尾,并且没有拼写错误。 - 最后验证:确保你的模块代码没有语法错误,可以独立运行。
一句话建议: 确保你的模块文件在Python的搜索路径下,并且没有命名冲突或语法错误。
名字没有.py 是啥操作
是的,可是加了.py 也没有用
加了.py 也没有用
求大神指点,一直显示:ModuleNotFoundError: No module named ‘abstest’
你执行这个语句的文件改个名
哦不,bash 所在文件夹
你这要指点的可就多了,楼上的大哥提示你了,执行 python 命令之前,先 cd 到放 abstest.py 文件的那个目录
cd 之后显示 Not a directory
按照你们的方法成功了,谢谢你们照顾我这个新人哈。


