在Python代码中导入自定义模块时经常遇到报错问题,本文通过实例分析两种常见的导入错误出现的原因及解决方法。
Python版本:3.8
1.相对导入报错
第一种情况
假设有如下的项目目录结构:
myproject
|- config.py
|- run.py
`- foo
|- __init__.py
|- bar.py
`- baz.py
其中myproject是项目根目录,config.py的内容为
A = 1
B = 2
在bar.py中通过相对导入使用config.py中的变量
A
,代码如下:
from ..config import A
def f():
return 2 * A
if __name__ == '__main__':
print(f())
执行bar.py会报错(不管在PyCharm还是命令行):
Traceback (most recent call last):
File "foo\bar.py", line 1, in
from ..config import A
ImportError: attempted relative import with no known parent package
第二种情况
假设bar.py定义了一个函数
f
:
def f():
return 2
在baz.py中通过相对导入使用该函数,代码如下:
from .bar import f
def g():
return f() + 1
if __name__ == '__main__':
print(g())
执行baz.py也会报错:
Traceback (most recent call last):
File "foo\baz.py", line 1, in
from .bar import f
ImportErr