文章标题

来源:互联网 发布:做数据是什么 编辑:程序博客网 时间:2024/05/22 06:43

python相对导入错误解析与解决方法

参考Python包的相对导入时出现错误的解决方法

python的相对导入方法:

from . import modulefrom .. import module

其中,”.”表示当前层级,”..”表示上一层级。但是运行程序时常遇到错误:

ValueError: attempted relative import beyond top-level package

以及

SystemError: Parent module '' not loaded, cannot perform relative import

关于产生错误的原因,参考博客里讲的很清楚,主要是当前的文件夹没有被python的解释器当作package。


解决方法:

  1. 检查需要被当作package的各个文件夹是否含有__init__.py文件,可以是空但必须要有。
  2. 如果只使用相对导入,那么主函数(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/…

重新运行就不会出错了。

原创粉丝点击