相对导入问题总结:attempted relative import with no known parent package

如果是准备在同一个目录下采用相对导入,以下面目录为例

Python3

Package

l  A.py

l  B.py

在package中有两个文件A.py和B.py两个文件

A.py内容:

     Def a():

                     Print(11111111)

在B.py文件中相对导入A.py文件,来调用a函数

B.py文件内容:

              from__future__ import absolute_import

              From.A import a

              a()

可能会出现attempted relative import with noknown parent package问题

出现这个问题的原因就是在python3当中是默认绝对导入的

在包中要加上__init__.py文件才能证明这个文件夹是一个package

但是呢,系统很容易将__name__赋值成__main__,从而导致把package看做一个顶层文件,而非一个package。可以用print(__name__)来做一个测试,如果输出__main__,就证明是这个问题。

那么怎么解决呢?

Python -m 文件名.package.A.py可以告诉python,这个package是一个package。

这里呢,在dos中可以进入到这个文件,再去执行这句话

这时候再执行 print(__name__)这句话,就会返回包名,与之前的__main__不同,说明问题解决。

 

 

其实之所以使用相对导入,目的就是为了比绝对导入更加易于以后别人使用,易于维护,尽量使用相对导入的方法,此外,绝对导入还有一种方法

 

绝对导入:

在python安装文件的lib中找到site-packages文件,在里面建立一个txt文件,将后缀修改为.pth,在里面写上你的所有要导入的.py文件的目录名

相对导入问题总结:attempted relative import with no known parent package_第1张图片


你可能感兴趣的:(python)