- Preface 前言
- 第1章 引论
- 第2章 编程惯用法
- 第3章 基础语法
- 建议19:有节制地使用 from…import 语句
- 建议20:优先使用 absolute import 来导入模块
- 建议21:i+=1 不等于 ++i
- 建议22:使用 with 自动关闭资源
- 建议23:使用 else 子句简化循环(异常处理)
- 建议24:遵循异常处理的几点基本原则
- 建议25:避免 finally 中可能发生的陷阱
- 建议26:深入理解 None 正确判断对象是否为空
- 建议27:连接字符串应优先使用 join 而不是 +
- 建议28:格式化字符串时尽量使用 .format 方式而不是 %
- 建议29:区别对待可变对象和不可变对象
- 建议30:[]、() 和 {}:一致的容器初始化形式
- 建议31:记住函数传参既不是传值也不是传引用
- 建议32:警惕默认参数潜在的问题
- 建议33:慎用变长参数
- 建议34:深入理解 str() 和 repr() 的区别
- 建议35:分清 staticmethod 和 classmethod 的适用场景
- 第4章 库
- 建议36:掌握字符串的基本用法
- 建议37:按需选择 sort() 或者 sorted()
- 建议38:使用 copy 模块深拷贝对象
- 建议39:使用 Counter 进行计数统计
- 建议40:深入掌握 ConfigParser
- 建议41:使用 argparse 处理命令行参数
- 建议42:使用 pandas 处理大型 CSV 文件
- 建议43:一般情况使用 ElementTree 解析 XML
- 建议44:理解模块 pickle 优劣
- 建议45:序列化的另一个不错的选择 JSON
- 建议46:使用 traceback 获取栈信息
- 建议47:使用 logging 记录日志信息
- 建议48:使用 threading 模块编写多线程程序
- 建议49:使用 Queue 使多线程编程更安全
- 第5章 设计模式
- 第6章 内部机制
- 建议54:理解 built-in objects
- 建议55:init() 不是构造方法
- 建议56:理解名字查找机制
- 建议57:为什么需要 self 参数
- 建议58:理解 MRO 与多继承
- 建议59:理解描述符机制
- 建议60:区别 getattr() 和 getattribute() 方法
- 建议61:使用更为安全的 property
- 建议62:掌握 metaclass
- 建议63:熟悉 Python 对象协议
- 建议64:利用操作符重载实现中缀语法
- 建议65:熟悉 Python 的迭代器协议
- 建议66:熟悉 Python 的生成器
- 建议67:基于生成器的协程及 greenlet
- 建议68:理解 GIL 的局限性
- 建议69:对象的管理与垃圾回收
- 第7章 使用工具辅助项目开发
- 第8章 性能剖析与优化
建议71:使用 pip 和 yolk 安装、管理包
setuptools有几个缺点,比如功能缺失(不能查看已经安装的包、不能删除已经安装的包),也缺乏对git、hg等版本控制系统的原生支持,所以致力于做easy_install改进版的pip在最近几年大受欢迎,成为了最流行的Python包管理工具。
在安装了setuptools以后,安装pip就非常简单了。
easy_install pip
pip使用子命令形式的CLI接口,首先要学习的当然是help。
# pip help Usage: pip <command> [options] Commands: install Install packages. uninstall Uninstall packages. freeze Output installed packages in requirements format. list List installed packages. show Show information about installed packages. search Search PyPI for packages. wheel Build wheels from your requirements. zip Zip individual packages. unzip Unzip individual packages. bundle Create pybundles. help Show help for commands. General Options: ...
从子命令可以对pip的功能有个大体的了解,也可以使用pip help <command>命令查看子命令的帮助信息。Install、uninstall就是用得最多的安装与卸载功能,list可以列出已经安装的包,对感兴趣的包可以使用show命令查看它的具体情况。下面我们重点了解一下这4个命令。
# pip install requests Downloading/unpacking requests Downloading requests-1.2.3.tar.gz (348kB): 348kB downloaded Running setup.py egg_info for package requests Installing collected packages: requests Running setup.py install for requests Successfully installed requests Cleaning up...
可以看到pip的install命令使用起来跟easy_install类似,但输出要简洁得多。然后再看看uninstall命令。
# pip uninstall requests Uninstalling requests: /usr/local/lib/python2.6/dist-packages/requests-1.2.3-py2.6.egg Proceed (y/n)? y Successfully uninstalled requests
删除包时,pip需要输入y进行确认,然后就可以删除干净了。
下面我们来看一段代码:
# python Python 2.6.5 (r265:79063, Oct 1 2012, 22:04:36) [GCC 4.4.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import requests Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named requests
看,找不到名为requests的模块。当然,我们也可以用list命令来确认。
# pip list argparse (1.2.1) Cheetah (2.0.1) docutils (0.9) Flask (0.9) Flask-RESTful (0.2.1) FormEncode (1.2.2) gevent (0.13.0) GnuPGInterface (0.3.2) greenlet (0.3.2) hello-prj (0.0dev) Jinja2 (2.6) ... # pip list | grep requests
安装的包实在太多了,不容易验证是否已删除,若使用grep命令帮助查找的结果为空,则requests包已经删除干净了。list子命令还可以单独列出有新版本的包(使用--outdated参数)和已安装最新版本的包(使用--uptodate参数)。另外,想要进一步了解比较感兴趣的模块,可以使用show命令。比如查看一下Flask的信息。
# pip show Flask --- Name: Flask Version: 0.9 Location: /usr/local/lib/python2.6/dist-packages/Flask-0.9-py2.6.egg Requires: Werkzeug, Jinja2
名字、版本、安装路径和依赖信息一样不缺,这对我们了解应用程序的运行环境非常有用。
pip list虽然能够列出已经安装的包,但使用上仍然稍有不便,这就是yolk存在的意义。yolk专注于挖掘已经安装的Python包的信息及PyPI上的包的信息。
yolk与piplist功能重复的部分是yolk {-l|-U},-1和-U这两参数分别用来显示已安装的所有包和可以更新的包,在此就不再介绍了。下面介绍的是pip还不具备的功能。
# yolk --entry-map nose {'console_scripts': {'nosetests': EntryPoint.parse('nosetests = nose: run_exit'), 'nosetests-2.6': EntryPoint.parse('nosetests-2.6 = nose:run_exit')}, 'distutils.commands': {'nosetests': EntryPoint.parse('nosetests = nose. commands:nosetests')}}
yolk--entry-map <package>可以显示包注册的所有入口点,这样可以了解到安装的包都提供了哪些命令行工具,或者支持哪些基于entry-point的插件系统。上例中,nose提供了nosetests命令并实现了distutils.commands插件(即python setup.py nosetests扩展命令)。那么如何查看有哪些包实现了某一个包的插件协议呢?--entry-points参数可以帮到你。
# yolk --entry-points abu.admin read_and_display.admin read_and_display = read_and_display.admin:Admin caihui.bs.admin caihui.bs = caihui.bs.admin:Admin
可以看到,支持abu.admin插件协议的包有两个:read_and_distplay和caihui.bs,它们的入口点名字分别是read_and_display.admin和caihui.bs.admin。怎么样,是不是对自己机器上安装了的包有了更深刻的理解?
最后,如果你使用的是桌面版的操作系统,利用yolk-H<package>可以打开一个浏览器,并将你指定的包显示在PyPI上的主页,从此告别手动拼接URL的历史。当然,yolk还有更多的功能可通过阅读它的手册逐步发掘。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论