V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
phrack
V2EX  ›  Python

浅谈 Python 的 package 和 module, import

  •  
  •   phrack · 2017-03-18 15:58:30 +08:00 · 3025 次点击
    这是一个创建于 2807 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    4 条回复    2017-03-20 13:43:15 +08:00
    corebym
        1
    corebym  
       2017-03-18 16:19:34 +08:00
    谢谢
    cosmicy
        2
    cosmicy  
       2017-03-18 17:23:48 +08:00 via Android
    了解到了,更清晰了,感谢
    mec
        3
    mec  
       2017-03-18 18:22:42 +08:00 via Android
    谢谢分享
    magicma
        4
    magicma  
       2017-03-20 13:43:14 +08:00
    确实清晰不少
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2155 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 01:17 · PVG 09:17 · LAX 17:17 · JFK 20:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.