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失败的原因及解决方法

12 回复

我猜你这个文件的文件名叫 abstest


帖子标题里说的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缓存文件出问题了,也会导致导入混乱。

解决方法:

  1. 检查你的文件名是不是和内置或第三方模块重名了,换个名字。
  2. 删除项目目录下的所有__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))

总结一下排查步骤:

  1. 先定位:在Python交互环境里跑import sys; print(sys.path),看看你的模块目录在不在输出的路径列表里。
  2. 再检查:确认你的模块文件名是.py结尾,并且没有拼写错误。
  3. 最后验证:确保你的模块代码没有语法错误,可以独立运行。

一句话建议: 确保你的模块文件在Python的搜索路径下,并且没有命名冲突或语法错误。

是的,可是加了.py 也没有用

求大神指点,一直显示:ModuleNotFoundError: No module named ‘abstest’

你执行这个语句的文件改个名

哦不,bash 所在文件夹

什么是 bash 所在文件夹,我已经把保存的文件名加了.py ,可是还是显示 No module named ‘abstest’

你这要指点的可就多了,楼上的大哥提示你了,执行 python 命令之前,先 cd 到放 abstest.py 文件的那个目录



cd 之后显示 Not a directory



按照你们的方法成功了,谢谢你们照顾我这个新人哈。

回到顶部