相对导入问题总结: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文件的目录名


  • 9
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值