返回介绍

建议71:使用 pip 和 yolk 安装、管理包

发布于 2024-01-30 22:19:09 字数 3756 浏览 0 评论 0 收藏 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文