pip 包管理工具

pip是Python官方集成的包管理工具,用于安装、升级和卸载Python包。在Windows上安装最新版Python软件后,pip也会一同自动安装,在Linux下,系统通常默认预装Python和pip的命令行工具,如果没有预装可能需要从对应Linux发行版的软件源中安装。下面我们介绍一些pip的相关基础概念和常用命令。本文没有记录的命令选项,也可以参考相关文档或查阅Linux下的man手册学习。

注意:Linux下由于长期并存Python2和Python3两个版本,因此可能同时预装了对应两个版本的pip,Python3对应的pip命令实际为pip3,这和Windows下可能存在区别,不过我们这里还是以pip作为命令来介绍。

Python包管理相关知识

PyPI仓库

PyPI(Python Package Index)是Python第三方扩展的软件仓库,类似Java中的Maven中央仓库或是NodeJS中的NPM公共仓库,pip命令默认就是从PyPI下载软件包的。在PyPI的网站页面中,我们也可以直接搜索扩展包以及查看扩展包的详细介绍。

PyPI地址:https://pypi.org/

pip安装Python包时需要从PyPI下载文件,如果在中国大陆无法访问PyPI可能导致pip报错,此时我们也可以使用清华大学提供的PyPI开源镜像站,执行以下命令可以将清华大学源设置为默认的PyPI镜像。

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

执行上面命令后会将镜像源配置写入pip的配置文件,这个配置文件在Linux下通常位于~/.config/pip/pip.conf,在Windows下通常位于C:\Users\<用户名>\AppData\Roaming\pip\pip.ini

whl包

whl包(即wheel,轮子)是Python中的包管理打包标准,它是一种二进制分发格式,本质上是一个ZIP文件,内部包含了Python模块、预编译的C扩展模块、依赖库、元数据、安装脚本等信息,whl包的出现主要是为了简化和加速Python包的安装。使用pip工具时通常我们可以不必操心依赖库采用哪种方式分发,工具会自动帮我们处理,不过一些极特殊情况可能需要我们手动安装whl包。

pip install <whl包文件名>

除了目前广泛使用的whl包,一些早期的项目可能用到其它的依赖包分发形式,比如源码方式、egg包方式(用于早期的easy_install包管理工具)等,不过现在已经十分罕见了。

pip命令简介

下面我们介绍一些常用的pip命令。

安装软件包

执行以下命令可以从PyPI下载并安装一个包。

pip install <package>
  • --upgrade参数:如果已安装则升级指定的软件包。

注意:

  1. Linux下pip命令实际上可能需要写作pip3(对于Python3来说),此外向系统全局的Python环境安装时(不推荐这么做)可能需要管理员权限,这种情况下需要加上sudo或切换到root用户。
  2. Linux下对于系统级的全局扩展包通常使用apt(或yumdnf等)命令来安装,Linux发行版维护的软件源中也维护了这些扩展包是出于系统稳定性和兼容性来考虑,pip实际上主要用于开发环境和具体的应用程序部署场景,这些场景下一般使用venv创建虚拟Python环境并在其中安装依赖包。

有关这些细节对于很多其它命令也是类似的,后续就不再赘述了。

查看已安装的所有软件包

执行以下命令查看已安装的所有软件包。

pip list
  • --outdate参数:列出已过时、需要升级的软件包。

卸载软件包

执行以下命令卸载一个已安装的包。

pip uninstall <package>

如果想卸载当前虚拟环境下的所有软件包该如何操作呢?pip没有直接提供这个功能,但我们可以使用Shell脚本或PowerShell脚本实现。

Linux下执行以下命令。

pip freeze | xargs pip uninstall -y

Windows下可在PowerShell中执行以下命令。

pip freeze | % { pip uninstall -y $_ }

从PyPI查找软件包

执行以下命令从PyPI查找软件包。

pip search <package>

该命令会查找和指定名字相似的软件包。实际上除了命令行,还是更推荐使用浏览器访问https://pypi.org/来搜索软件包,网站中展示的信息更全而且界面也更加友好。

查看已安装的软件包的详细信息

执行以下命令查看已安装的软件包的详细信息。

pip show <package>

该命令会详细列出已安装的软件包的工程元信息。

Python中的其它包管理工具

conda

Anaconda是一个包含大量可选计算库和周边工具的Python发行版,conda则是其包管理工具,实际上conda还可以用来管理Python版本或是创建虚拟环境(类似venv),它的定位更类似一个集成开发包。不过conda仅在科学计算和机器学习领域有应用,它的存在主要是为不太懂软件工程的人员提供一个“傻瓜”化的Python开发环境,因此本身也有很多局限性,在其它领域不推荐使用conda

另外要注意的是conda是开源的,但Anaconda需要商业授权!

easy_install

除了pip工具之外,Python实际上还有一个早期的包管理工具easy_install,不过现在不是很常用了。我上次使用easy_install是很多年前了,那时还在使用Python2.7版本,当时用pip安装了一个软件包结果遇到了Bug,神奇的是尝试用easy_install却能正常安装,不过随着时间的推移大部分扩展库都在向兼容pip靠拢,现在easy_install已经不再推荐使用了。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。