Python中无法从test/abc.py导入hello()的问题求助
问题原因
Python标准库自带一个名为abc的模块(用于定义抽象基类),当你在main.py中直接写import abc或from abc import hello时,Python会优先加载系统标准库的abc模块,而不是你自己在test目录下创建的abc.py,这就是报错的根源。
正确的导入方法
以下几种方法都可以解决这个问题:
方法1:将test目录转为Python包,通过包名导入
在test目录下创建一个空的__init__.py文件,让Python把test识别为一个可导入的包,然后修改main.py的导入代码:
# test/main.py from test.abc import hello print(hello())
或者:
# test/main.py import test.abc as abc print(abc.hello())
运行时需要确保test目录的父目录在Python的搜索路径中,比如在test的父目录下执行python -m test.main。
方法2:使用相对导入(仅在包内部有效)
如果main.py和abc.py属于同一个包(即test是包),可以用相对导入:
# test/main.py from .abc import hello print(hello())
运行时同样需要以包的方式执行,比如在test的父目录下运行python -m test.main,不能直接在test目录下运行python main.py。
方法3:修改Python的搜索路径,优先加载当前目录的文件
在main.py开头添加代码,把当前脚本所在目录加入Python的搜索路径最前面,这样会优先加载自己的abc.py:
# test/main.py import sys import os sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) from abc import hello print(hello())
或者更简洁的写法:
# test/main.py import sys sys.path.insert(0, '.') from abc import hello print(hello())
这种方法不需要创建__init__.py,直接在test目录下运行python main.py即可。
方法4:重命名自己的abc.py文件
最简单的方法是把你自己的abc.py改个名字,比如my_abc.py,然后修改main.py的导入代码:
# test/main.py from my_abc import hello print(hello())
这样就不会和标准库的abc模块冲突了。
内容的提问来源于stack exchange,提问作者Super Kai - Kazuya Ito
相关产品推荐
相关产品推荐

