对Python中相对import的理解

在调试Python代码时遇到相对导入问题,报错提示找不到父包。文章解释了相对导入的工作原理,指出在直接运行脚本时,由于`__package__`为None,导致相对导入失败。解决方案是使用绝对导入或调整包结构。分享了对`from . import`和`import`区别的理解,并提供了一些参考资料。
摘要由CSDN通过智能技术生成

问题描述

在调试别人的代码的时候,比如文件结构如下:

package
    ├── __init__.py
    ├── cfg.py
    └── model.py

别人可能在model.py里面写有如下内容

from .cfg import cfg_content

class model():
	...

def demo():
	'''测试model运行'''
	m = model()
	m.test_function()
	...

if __name__ == '__main__':
	demo()

这时候,__name__ == '__main__'显然是直接运行当前文件时进行demo演示的。
但是,直接运行的结果就是报错:

...
	from .cfg import cfg_content
ImportError: attempted relative import with no known parent package

如果将from .cfg import cfg_content改成from cfg import cfg_content就可以正常运行。

我的理解

上面的报错内容也有提示,这个引用的包没找到父包。
经过参考多个网页,我的理解如下:
在使用相对import,也就是from .cfg import xxx而不是from cfg import xxx时,其中的“点”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值