Python 关于__init__.py的理解

本文深入探讨了在Python中遇到的包导入错误,如SystemError和ValueError,并详细解释了这些错误背后的原因。文章指出,相对导入的问题通常源于Python解释器未能正确识别文件夹为包。为解决这一问题,文章提供了两个关键条件:确保每个包目录下存在__init__.py文件,且不要将包内的.py文件作为主程序直接运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    在使用Python文件时,我们引入了一个Package的概念,这样方便我们去调用我们写的函数,而不需要重新复制一遍。但是在包导入的时候,会出现各种各样的问题。

在使用以下方法进行导包的时候:

from . import xxx
from .. import xxx

会出现

SystemError: Parent module '' not loaded, cannot perform relative import
ValueError: attempted relative import beyond top-level package

这样的问题。

    其实这两个错误的原因归根结底是一样的:在涉及到相对导入时,package所对应的文件夹必须正确的被python解释器视作package,而不是普通文件夹。否则由于不被视作package,无法利用package之间的嵌套关系实现python中包的相对导入。

文件夹被python解释器视作package需要满足两个条件:

  1、文件夹中必须有__init__.py文件,该文件可以为空,但必须存在该文件。

  2、不能作为顶层模块来执行该文件夹中的py文件(即不能作为主函数的入口)。

相对导入时不能超出最高层级的package。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值