浅谈 Python 的 package 和 module, import

2017-03-18 15:58:30 +08:00
 phrack

从来没有尝试深入一点去了解 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 的处理更加成熟和灵活。

3021 次点击
所在节点    Python
4 条回复
corebym
2017-03-18 16:19:34 +08:00
谢谢
cosmicy
2017-03-18 17:23:48 +08:00
了解到了,更清晰了,感谢
mec
2017-03-18 18:22:42 +08:00
谢谢分享
magicma
2017-03-20 13:43:14 +08:00
确实清晰不少

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/348460

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX