可能每个 Python 初学者都试过使用 pip install 来安装 wordcloud、pygame 等第三方包。但 pip 包管理工具究竟是什么;有哪些参数、选项、用法;如何在 Pycharm 中管理已安装的包;除了 pip 还有什么其他 Python 包管理工具,这些问题可能就不是完全清楚了。本文就来简单探索一下 pip 。
本文涉及的所有命令均为在 Windows 终端(例如 Windows 10 的 PowerShell)中执行,而非在 Python 交互式解释器中。如果你不小心犯了这样的错误,会是下面这样
>>> python --version
Traceback (most recent call last):
File "" , line 1, in <module>
NameError: name 'python' is not defined
回到正确的终端运行即可,也就是每行最前面没有 >>>
提示符的。
pip与Python包管理 - muzing的杂货铺
pip 是 Python 的一个包(Package)管理器,用来安装和管理 Python 标准库之外的其他包(第三方包)。从 Python 3.4 起,pip 已经成为 Python 安装程序的一部分,也是官方的标准的 Python 包管理器。
首先确保可以在命令行运行 Python:
python --version
如果显示了 Python 版本号,则说明正常。
然后检查是否可在命令行使用 pip:
python -m pip --version
如果显示了 pip 版本则正常。否则,可以尝试从标准库引导(这个命令有时可以修复出现问题的 pip):
python3 -m ensurepip --default-pip
如果依然不能正常使用 pip ,可以考虑重新使用 Python 的 exe 安装包修复,注意在高级选项里面勾选 pip。
如果 pip 可用,可以先跳转到本文“升级包”一节查看升级 pip 的方法,将 pip 升级到最新版本。
安装最新版本的:
pip install "SomeProject"
安装指定版本的:
pip install "SomeProject==1.4"
安装大于等于某版本,且小于另一指定版本的:
pip install "SomeProject>=1,<2"
安装与特定版本兼容的版本:
pip install "SomeProject~=1.4.2"
这种情况下,会安装版本为 ==1.4.*
且 >=1.4.2
的。
由于直接使用 pip 从 PyPI 上安装时,需要从国外的服务器下载数据,网络连接速度往往较慢,常会出现下载安装失败的情况。
一种解决办法是手动设置 socket 超时时间(默认15秒)和断开重连尝试次数(默认5次):
pip install pyqt5 --timeout 120 --retries 10 # 超时时间120秒,重试10次
另一个更好的方法是从国内的镜像站下载包文档。
以清华大学开源软件镜像站为例:
临时使用(只对这一次安装有效)
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package
使用该镜像站升级 pip:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pip -U
设为默认下载源:
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
会将该配置写入到用户目录下的 /pip/pip.conf 文件中,例如在我的机器(Linux 系统,与Windows 略有不同)上:
$ python3 -m pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
Writing to /home/muzing/.config/pip/pip.conf
查看 pip.conf 的内容,可以看到写入的内容
$ cat ~/.config/pip/pip.conf
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
升级包到最新版本的命令如下:
pip install --upgrade SomeProject
这个命令也可以用于升级 pip 、setuptools、wheel 到最新版本
python -m pip install --upgrade pip setuptools wheel # 如果下载速度太慢,请参看上一节使用镜像站
虽然单独使用 pip 就可以实现从预构建的二进制归档(pre-built binary archives)安装,但使用最新版本的 setuptools 和 wheel 使你也能够从源文件(source archives)安装
在 GitHub 上克隆他人的 Python 项目时,常常会有一个 requirements.txt
文件,Pycharm 也会提醒我们,是否根据该文件创建虚拟环境并安装包。其实这个文件里面就列出了该项目所使用的所有第三方 Python 包及其版本信息。我们在写自己的 Python 项目时也应创建一个文本文件,写明项目的包依赖,并根据惯例命名为 requirements.txt 。
打开已有 requirements.txt 的项目,使用如下命令安装需求文件中指定的包:
pip install -r requirements.txt
在写自己的 Python 项目时,如果想要创建依赖文件,可以使用下面的命令:
pip freeze > requirements.txt
直接使用 pip freeze
命令的缺点是,会把当前 Python 环境中所有已安装的包都列出来,而不管这些包是否被 import 引入使用。为解决此问题,可以使用 pipreqs 一类的第三方库来生成 requirements:
pip install pipreqs # 安装 pipreqs
pipreqs <Project_Dic> --encoding=utf-8 # 生成 requirements,将 替换为你的项目路径
有时我们并不需要指定第三方包的版本严格等于(hardcoding)目前使用的版本
一般来讲,包都是向后兼容的,且新版本的包往往有修复 bug 、提升性能等优化,我们希望可以安装更新版本的包。
但也有一些情况,太新版本的包可能会出现问题,如对旧版本不兼容的更改(可能出现在大的版本号更新时)、破坏包之间的依赖关系等。例如,假设未来某天 requests 包推出了3.0版本,且语法和目前的 2.* 不相同,就会让现有的项目出现问题,因此需要避免。
可以在 requirements 文件中使用逻辑运算符,较为灵活的控制包的版本。
例如,在编辑器中打开 requirements.txt 文件,并进行如下修改:
certifi>=2018.11.29
chardet>=3.0.4
idna>=2.8
requests>=2.21.0, <3.0
urllib3>=1.24.1
再使用 pip 安装或升级包时,就会按照此要求安装指定范围内的最新版本。
由于生产环境和开发环境的不同,对有些包的需求也不同。开发环境中往往安装了更多用于测试等功能的辅助性包,这些包在生产环境中是不需要的。
可以创建第二个 requirements 文件(requirements_dev.txt)来列出创建开发环境所需要的其他工具,例如:
# In requirements_dev.txt
-r requirements.txt
pytest>=4.2.0
由于 pip 允许在 requirements 文件中指定其他参数,所以可以加上一行 -r requirements.txt
,这样直接使用
pip install -r requirements_dev.txt
就可以安装所有开发环境所需要的包了。
而此时在生产环境继续使用命令:
pip install -r requirements.txt
就不会安装 pytest ,保持了生产环境的轻量可靠。
可以使用 pip search
命令搜索包,下面列出了该命令的 help 文档
$ pip3 help search
Usage:
pip3 search [options] <query>
Description:
Search for PyPI packages whose name or summary contains <query>.
Search Options:
-i, --index <url> Base URL of Python Package Index (default
https://pypi.org/pypi)
然而相比在命令行工具进行搜索,只能看到包的简短描述信息,更好的方法是在浏览器中打开 PyPI 网页,搜索查看包的详细信息。
另外,多关注社区动态、博主分享、Python 公众号等,多逛逛 GitHub ,往往能收藏到很多强大易用的优秀 Python 包。
在卸载包之前,请先运行 pip show
命令检查该包:
pip show [package-name] # 检查 [package name] 的信息
例如:
$ pip3 show pyqt5
Name: PyQt5
Version: 5.15.4
Summary: Python bindings for the Qt cross platform application toolkit
Home-page: https://www.riverbankcomputing.com/software/pyqt/
Author: Riverbank Computing Limited
Author-email: [email protected]
License: GPL v3
Location: /usr/local/lib/python3.8/dist-packages
Requires: PyQt5-Qt5, PyQt5-sip
Required-by:
注意最后的两个字段 Requires 和 Required-by 。可以看到,在我的机器上 PyQt5 包依赖于 PyQt5-Qt5 和 PyQt5-sip 这两个包,如果卸载它们,则 PyQt5 也就不能正常使用了。没有任何包依赖于 PyQt5,因此直接卸载 PyQt5 是安全的。
卸载命令:
pip uninstall [package-name]
卸载包时会显示要删除的文件,并要求确认。如果已经在上一步中检查确认了该包是可以删除的(没有被其他包依赖),那么可以加上一个 -y
选项来跳过显示文件列表和确认:
pip uninstall [package-name] -y
也可以在一行命令中卸载多个包,包名之间用空格隔开即可:
pip uninstall [package-name-1] [package-name-1] [package-name-1]
还可以通过 -r
选项来卸载 requirements 中列出的所有包,当检查确认不会破坏其他依赖关系后,运行下面的命令:
pip uninstall -r requirements.txt -y
在这里列出了命令行 pip help
返回的帮助信息,并尽我所能做了简单翻译。
使用 pip help
命令查看某个命令的具体帮助。
$ pip3 help
Usage:
pip3 <command> [options]
Commands:
install 安装包
download 下载包(只下载不安装)
uninstall 卸载包
freeze 以 requirements 格式列出所有依赖包
list 列出所有已安装的包
show 显示已安装包的信息
check 验证已安装的包是否具有兼容的依赖项
config 管理本地和全局配置
search 在 PyPI 中搜索包
cache 检查和管理 pip 的 wheel 缓存
index 检索包索引中的可用信息
wheel 为你的 requirements 构建 wheel
hash 计算包档案的 hash 值
completion A helper command used for command completion.
debug 显示对 debug 有用的信息
help 显示命令的帮助
General Options:
-h, --help 显示帮助
--isolated 以隔离模式运行 pip ,忽略环境变量和用户配置
-v, --verbose 显示更多的输出。此选项可累加,且最多3次
-V, --version 显示版本并退出
-q, --quiet 显示更少的输出。 此选项可累加,且最多三次 (对应于 WARNING,
ERROR, 和 CRITICAL logging 等级)
--log <path> 附加详细日志的路径
--no-input 禁用提示输入
--proxy <proxy> 使用该形式指定代理:
[user:passwd@]proxy.server:port
--retries <retries> 每个连接尝试重新连接的最大次数(默认为5次)
--timeout <sec> 设置 socket 超时时间(默认15秒)
--exists-action <action> 路径已存在时的默认操作:
(s)witch, (i)gnore, (w)ipe, (b)ackup, (a)bort
--trusted-host <hostname> 标记此 host 或 host:port 为受信任的,
即使它没有有效的HTTPS, 甚至没有 HTTPS
--cert <path> PEM-encoded CA certificate bundle 的路径
如果提供了该项,则覆盖默认值
查看 pip 文档中的 'SSL Certificate Verification'
以查看更多信息
--client-cert <path> SSL 客户端证书的路径,
一个单独的包含私钥和 PEM 格式证书的单个文件
--cache-dir <dir> 将缓存数据存储在 <dir> 中
--no-cache-dir 禁用缓存
--disable-pip-version-check 不要定期检查 PyPI 以确认是否有新版本 pip 可下载。
使用 --no-index 关闭提示
--no-color 关闭彩色输出
--no-python-version-warning 关闭 即将不受支持的 Python 的警告
--use-feature <feature> 启用可能向后不兼容的新功能
--use-deprecated <feature> 启用将在未来被移除的已弃用功能
如果你使用过 Anaconda,那么一定不会对 Conda 包管理器感到陌生。Conda 是包括 Python 在内的许多语言的包、依赖项和环境的管理器,广泛应用于数据科学和机器学习领域。
Pipenv 官网
Pipenv GitHub 首页
Poetry 官网
Poetry GitHub 首页
不同版本 Pycharm 界面可能有微小差异,这里以 Pycharm Community 2021.2.2 为例。
在设置中找到“项目 —— Python 解释器”,即可查看已经安装的包、包的版本、包的最新版本。
在这个界面选中某个包之后,点击升级(向上三角)按钮、卸载(减号)按钮即可。
这里通过图形界面列出的各种包信息,其实还是默认从https://pypi.python.org/simple 源获取的信息,所以可能加载很慢,必要时可以更换为国内镜像源。
先点击安装包的按钮(卸载包、升级包按钮左边那个加号按钮),进入安装包的界面
在这个界面点击左下角“管理仓库”
在这里点击左上角加号添加其他源,或直接把默认的 https://pypi.python.org/simple 改为其他源
这是我的配置,只设置了一个清华镜像站的源。
完成更换镜像源之后,就可以安装包了。在搜索框内输入想要安装的包,会列出许多搜索结果,可以一一点开查看包描述,然后安装我们需要的那个,还可以手动勾选安装指定版本。
PyPI 读音为 Pie Pea Eye 。