从来没有尝试深入一点去了解 python 的 package 和 module ,今天稍微 google 了几篇文章看了下,做点记录,估计还是有很多错误的地方,还请指正。
首先从 package 说起, package 意思就是包,那包里面就可以装点东西,比如再装一个小一点的包,或者放个手机。小一点的包的话就是 subpackage ,手机的话就是一个 module ,收音机也可以,就是收音机 module 。 package 是以 directory 的形式出现的,只要这个 directory 里面放了一个__init__.py , python 就把这个 directory 当做一个 package 来处理,没有其他神奇的地方了。总结就是 package 就是一个包含__init__.py 的一个 directory 。
再说 module , module 一般就是一个.py 文件,比如 os.py ,那就会是一个 os module 。简单,很好理解。
再来看看 import 这个关键字,直观上,我们会见到这样几种 import :
import module
import "package"
from module import variable
第一种: import module ,例子: import os , import requests.sessions
第二种: import "package",我打上引号是因为这里的"package"其实是一个 module , 比如 import requests, requests 是一个 package 的名字对吧,但是 type(requests)返回的是 module ,这个 module 实际上是由 requests 这个包里面的__init__.py 生成的,也就是说 import requests 实际上的操作是 import requests.init.py as requests 。
第三种: from module import variable ,这个没啥好说的,其实 import 的还是 module 。
综上, import 其实都是在导入一个 module 。
ps 前面所讲的 package 是包含__init__.py 的 directory 是一般情况,这种 package 被称作 regular package ,绝大部分 package 都是这样存在的。前面讲一个 module 是一个.py 文件也只是一般,是因为 import hook 的存在, module 可以以任意形式存在,所以网络远程加载模块对于 python 来说也是轻而易举。
以上的讨论基于 python2 , python3 对 package , library , import 的处理更加成熟和灵活。
1
corebym 2017-03-18 16:19:34 +08:00
谢谢
|
2
cosmicy 2017-03-18 17:23:48 +08:00 via Android
了解到了,更清晰了,感谢
|
3
mec 2017-03-18 18:22:42 +08:00 via Android
谢谢分享
|
4
magicma 2017-03-20 13:43:14 +08:00
确实清晰不少
|