ImportError 找不到父包 使用相对导入报错

ImportError 使用相对导入报错

ImportError: attempted relative import with no known parent package.相对导入找不到父包

起因

在通过BV1h64y1M7UC学习python的时候,在使用Django构建web应用部分,对使用 . 和 .xxx 导入很感兴趣。

# admin.py
from django.urls import path
from . import views
# views.py
from .models import Product

于是就自己创建了一个例子项目想试一试。可是,实验的时候频繁出现ImportError: attempted relative import with no known parent package.

我就认为是自己对 . 和 .xxx 的含义理解不到位,不全面。就去网上查了查,知道这叫相对导入。并按照这篇文章(3条消息) 【一分钟解决】Python报错ImportError: attempted relative import with no known parent package_jaredyam的博客-CSDN博客的最后一块相对导入部分的介绍,又回到自己的项目试了试。结果还是报这个错。

气急败坏的我又回去运行了admin.py和views.py,结果竟然也报了这个错,我蒙圈了。明明跟着敲的时候也运行了,没有出错呀。
ImportError

解决

这时我就想不是我对 . 和 .xxx 的使用出错了,而是其他的原因。好在我不小心找到了这篇文章python - ImportError : Attempted relative import with no known parent package - Stack Overflow。经过第一个评论的点播,去看了看python文档相关部分,Python Docs这才是整个问题的关键!!!

Note that relative imports are based on the name of the current module. Since the name of the main module is always "__main__", modules intended for use as the main module of a Python application must always use absolute imports.

[翻译]注意,相对导入是基于当前模块的名称。由于主模块的名称始终为"main",因此打算用作Python应用程序主模块的模块必须始终使用绝对导入。

也就是说当我直接运行admin.py和views.py时,它们就是main模块,它们的__name__属性此时是__main__,此时它们是不能使用相对导入的。

实验验证:当直接运行modA.py的时候,就会出现上面的报错,这时候该模块的name就成main了,找不到父包了。

但是当在main.py中使用package1.modA.p1a()时就成功运行了不会出现任何的报错。
在这里插入图片描述

# modA.py
from .modB import p1b


def p1a():
    p1b()
    print("我是package1的moduleA的方法")
    
p1a()
# modB.py
def p1b():
    print("我是package1的moduleB的方法")
# main.py
import package1.modA


def print_hi(name):
    print(f'Hi, {name}')


if __name__ == '__main__':
    package1.modA.p1a()

在这里插入图片描述

【这个实验参考某篇文章或者视频的,但记不得是哪个了,抱歉】

感悟

主要还是不懂的东西太多了。比如在看文章和视频的时候,我不知道script脚本指的是什么,其实就是main模块。__name__也忘了是干啥的了。所以看很多文章都很吃力。

太多了。比如在看文章和视频的时候,我不知道script脚本指的是什么,其实就是main模块。__name__也忘了是干啥的了。所以看很多文章都很吃力。

以前是选修过python的,不过忘的差不多了,就想通过这6小时的视频BV1h64y1M7UC补一补,希望它可以让我回忆起来。回忆个der,就是重新学了。毕竟是视频短__name__也没讲。还得继续找点项目什么的继续学呀。

  • 18
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值