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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 21:47:45