文章标题
2017-12-03 15:47
274 查看
python相对导入错误解析与解决方法
参考Python包的相对导入时出现错误的解决方法python的相对导入方法:
from . import module from .. import module
其中,”.”表示当前层级,”..”表示上一层级。但是运行程序时常遇到错误:
ValueError: attempted relative import beyond top-level package
以及
SystemError: Parent module '' not loaded, cannot perform relative import
关于产生错误的原因,参考博客里讲的很清楚,主要是当前的文件夹没有被python的解释器当作package。
解决方法:
检查需要被当作package的各个文件夹是否含有
__init__.py文件,可以是空但必须要有。
如果只使用相对导入,那么主函数(main.py)入口不能在作为package的文件夹中,因为这样会使得python解释器在文件夹存在
__init__.py文件的情况下,仍不能将其视为package。
引用参考博客中的例子:
目录树
testIm/
–init.py
–main.py : from Tom import tom
–Tom/
–init.py : print(“I’m Tom’s init!”)
–tom.py : from . import tomBrother, from .. import Kate,print(“I’m Tom!”)
–tomBrother.py print(I’m Tom’s Brother!)
–Kate/
–init.py : print(“I’m Kate’s init!”)
–kate.py
运行文件:main.py
此时,
from .. import Kate会报错,因为上一级文件夹是
testIm,但是由于在这一层级里有作为主函数入口的
main.py文件,所以python解释器不能将其视为package,即关于
..的导入无效。解决方法是将
main.py移出
testIm文件夹:
test/
–main.py : from testIm.Tom import tom
–testIm/…
重新运行就不会出错了。