概念 | 解释 |
---|---|
import | 即导入,方式就是在import位置将代码文件拷贝过去。 |
模块 | python中一个.py文件就是一个模块 |
包 | 指软件包,举例import matplotlib.pyplot中(其中pyplot非函数,至少是一个模块或者包),matplotlib就是一个软件包。 |
__init__.py
的作用是让一个呈结构化分布(以文件夹形式组织)的代码文件夹变成可以被导入import
的软件包。
为了形象地解释,我建立了一个test
文件夹,其中一个文件夹A
打算建立成一个软件包,然后尝试在B
文件夹的的run.py
文件下导入A
包中的模块。
__init__.py
test
文件夹中包含的文件如下:
此时如果在B/run.py
中运行以下语句的结果为:
语句 | 运行结果 |
---|---|
import A | ImportError: No module named A |
import A.A_A | ImportError: No module named A.A_A |
import A.A_B | ImportError: No module named A.A_B |
结论:此时A
并不能被当成是一个软件包。
A
中包含__init__.py
A
文件夹下包含__init__.py
,test
文件夹结构变为如下:
在B/run.py
中运行以下语句的结果依次列在表中:
语句 | 运行结果 |
---|---|
import A | 成功 |
import A.A_A | ImportError: No module named A_A |
import A.A_B | 成功 |
结论:由A.A_B
能被成功import
看出此时A
已经是一个软件包,因为A
下的.py
文件已经能够程序识别出来。但是由于A
下的A_A
还不是一个软件包,所以A.A_A
还不能被导入。
A.A_A
中也包含__init__.py
A
文件夹及其子文件夹下都包含__init__.py
,test
文件夹结构变为如下:
在B/run.py
中运行以下语句的结果依次为:
语句 | 运行结果 |
---|---|
import A.A_B | 成功 |
import A.A_A | 成功 |
import A.A_A.A_A_A | 成功 |
结论:此时A
及其子文件夹A_A
都成功变成软件包,其中的模块可以被任意导入。
A
时并未将其下的子模块自动导入,当__init__.py
文件不为空时,其中可以填写from . import A_A
类似语句实现自动子模块导入。
__init__.py
的包也可以当作命名空间包使用,使命名一致的包被统一管理。扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有