pip 是 Python 包索引中使用最广泛的包管理器,默认安装在 Python 的最新版本中。
1: 安装程序包
安装名为 SomePackage 的软件包的最新版本:
$ pip install SomePackage
安装软件包的特定版本:
$ pip install SomePackage==1.0.4
指定软件包的最小安装版本:
$ pip install SomePackage>=1.0.4
如果命令在 Linux/Unix 上显示权限被拒绝的错误,则使用 sudo 命令
从需求文件安装
$ pip install -r requirements.txt
需求文件的每一行都说明了要安装的内容,就像 pip install 的参数一样,有关文件格式的详细信息,请参见此处: 需求文件格式。
安装软件包后,可以使用 freeze 命令进行检查:
$ pip freeze
2: 列出使用 pip安装的所有软件包
列出已安装的软件包:
$ pip list
# example output
docutils (0.9.1)
Jinja2 (2.6)
Pygments (1.5)
Sphinx (1.1.2)
列出过期软件包,并显示可用的最新版本:
$ pip list --outdated
# example output
docutils (Current: 0.9.1 Latest: 0.10)
Sphinx (Current: 1.1.2 Latest: 1.1.3)
3: 升级软件包
运行下面的命令
$ pip install --upgrade SomePackage
将升级 SomePackage 软件包及其所有依赖包。此外,在升级之前,pip 会自动删除旧版本的软件包。
要升级 pip 本身,请在 Unix 上执行
$ pip install --upgrade pip
或在 Windows 电脑上执行
$ python -m pip install --upgrade pip
4: 卸载软件包
卸载软件包:
$ pip uninstall SomePackage
5: 更新 Linux 上所有过期软件包
pip 目前不包含允许用户一次性更新所有过时软件包的标记。不过,这可以通过在 Linux 环境中将命令管道化来实现:
pip list --outdated --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install -U
该命令会获取本地虚拟环境中的所有软件包,并检查它们是否过时。它会从列表中获取软件包名称,然后将其导入 pip install -U 命令。在此过程结束时,所有本地软件包都会更新。
6: 更新 Windows 上的所有过期软件包
pip 目前不包含允许用户一次性更新所有过时软件包的标记。不过,在 Windows 环境中,可以通过将命令管道化来实现这一功能:
for /F "delims= " %i in ('pip list --outdated --local') do pip install -U %i
该命令会获取本地虚拟环境中的所有软件包,并检查它们是否过时。它会从列表中获取软件包名称,然后将其导入 pip install -U 命令。在此过程结束时,所有本地软件包都会更新。
7: 创建一个包含系统中所有软件包的 requirements.txt 文件
pip 通过提供 freeze 选项来帮助创建 requirements.txt 文件。
pip freeze > requirements.txt
这将把系统中安装的所有软件包及其版本的列表保存到当前文件夹中名为 requirements.txt 的文件中。
8: 使用某个 Python 版本的 pip
如果同时安装了 Python 3 和 Python 2,则可以指定希望 pip 使用哪个版本的 Python。
当软件包只支持 Python 2 或 Python 3 时,或者当您希望同时使用这两个版本进行测试时,这一点非常有用。
如果要安装 Python 2 的软件包,运行
pip install [package]
or:
pip2 install [package]
如果您想安装 Python 3 的软件包,请这样做:
pip3 install [package]
你还可以使用以下命令调用某个包的安装:
\path\to\that\python.exe -m pip install some_package # on Windows OR
/usr/bin/python25 -m pip install some_package # on OS-X/Linux
在 OS-X/Linux/Unix 平台上,必须注意 python 系统版本(升级后系统将无法运行)与用户版本之间的区别。您可能需要在这些命令前加上 sudo 并输入密码,这取决于您试图升级的版本。
同样,在Windows上,一些python安装程序,特别是那些属于另一个包的python安装程序,最终可能安装在系统目录中——你必须从运行在管理模式下的命令窗口升级这些目录——如果你发现看起来需要这样做,最好使用命令python -c“import sys;print(sys.path);”检查你要升级的python安装程序。‘或’ py -3.5 -c“import sys;print(sys.path);”你还可以使用 PIP——version`来检查你要运行的是哪个PIP。
在Windows上,如果你同时安装了python 2和python 3,并且你的路径中python 3的值大于3.4,那么你的系统路径中很可能也安装了python启动器py。然后你可以像这样做:
py -3 -m pip install -U some_package # Install/Upgrade some_package to the latest python 3
py -3.3 -m pip install -U some_package # Install/Upgrade some_package to python 3.3 if present
py -2 -m pip install -U some_package # Install/Upgrade some_package to the latest python 2 - 64 bit if present
py -2.7-32 -m pip install -U some_package # Install/Upgrade some_package to python 2.7 - 32 bit if present
如果您正在运行和维护多个版本的python,我强烈建议您阅读python virtualenv或venv虚拟环境,它们允许您隔离python版本和存在的软件包。
9: 创建一个requirements.txt文件,只包含当前虚拟环境中的包
PIP通过提供freeze选项帮助创建requirements.txt文件。
pip freeze --local > requirements.txt
--local参数只会输出在本地安装到virtualenv的包和版本列表。
全局包将不会被列出。
10: 将尚未在 pip 上安装的软件包作为轮子安装
许多纯 Python 软件包还没有作为轮子出现在 Python 软件包索引中,但仍能正常安装。但是,有些软件包在 Windows 上会出现可怕的 vcvarsall.bat not found 错误。
问题在于您要安装的软件包包含 C 或 C++ 扩展,目前还不能从 Python 软件包索引 pypi 中以预编译轮子的形式提供,而且在 Windows 上您也没有编译此类项目所需的工具链。
最简单的办法是访问 Christoph Gohlke 的优秀网站,找到所需库的 “适当 ”版本。所谓 “合适”,是指软件包名称中的 “cpNN”- 必须与您的 Python 版本相匹配,例如,如果您使用的是 Windows 32 位 Python,即使是在 win64 上,其名称也必须包括 -win32-,如果使用的是 64 位 Python,则必须包括 -win_amd64-,然后 Python 版本必须相匹配,例如,对于 Python 34,文件名必须包括 -cp34-,等等。
另外,您还需要为所使用的 python 版本获取相应的 windows 开发包,为您要构建的软件包接口的任何库获取头文件,可能还需要为所使用的 python 版本获取 python 头文件,等等。
Python 2.7 使用 Visual Studio 2008,Python 3.3 和 3.4 使用 Visual Studio 2010,Python 3.5+ 使用 Visual Studio 2015。
- 安装 “Visual C++ Compiler Package for Python 2.7”(可从 Microsoft 网站获取)或
- 安装 “Windows SDK for Windows 7 and .NET Framework 4”(v7.1),可从 Microsoft 网站获取;或
- 安装 Visual Studio 2015 Community Edition(或发布后的任何后续版本),确保您选择了安装 C & C++ 支持的选项(不再是默认选项)--我听说下载和安装可能需要 8 个小时,因此请确保在第一次尝试时设置了这些选项。
然后你可能需要找到与你所需软件包链接的任何库的修订版相匹配的头文件,并将其下载到适当的位置。
最后,你可以让 pip 来完成你的构建工作--当然,如果软件包有你还没有的依赖项,你可能还需要找到它们的头文件。
其他方法: 也可以在 pypi 或 Christop 的网站上查找你要找的软件包的稍早版本,这些版本要么是纯 python 的,要么是为你的平台和 python 版本预编译的,如果找到的话,可以使用这些版本,直到你的软件包可用为止。同样,如果您使用的是最新版本的 python,您可能会发现软件包维护者需要一些时间才能跟上,因此对于真正需要特定软件包的项目,您可能不得不暂时使用稍旧的 python。你也可以查看软件包的源代码网站,看看是否有预置或纯 python 的分叉版本,并搜索能提供你所需功能但可用的替代软件包--我想到的一个例子就是 Pillow,它得到了积极的维护,目前是 PIL 的替代品,但已经 6 年没有更新了,也不适用于 python 3。
后记,我鼓励遇到这种问题的人到软件包的 bug 跟踪器上添加一个,或者如果还没有的话,提出一个请求,礼貌地要求软件包维护者在 pypi 上为您的特定平台和 Python 组合提供一个轮子,如果这样做了,随着时间的推移,情况通常会好转,有些软件包维护者并没有意识到他们错过了人们可能正在使用的特定组合。
安装预发布包注意事项
Pip 遵循语义版本规则,默认情况下优先安装已发布的软件包,而不是预发布软件包。因此,如果某个软件包已发布为 V0.98,而候选发布版也是 V1.0-rc1,那么 pip install 的默认行为将是安装 V0.98--如果你想安装候选发布版,建议你先在虚拟环境中进行测试,你可以使用 --pip install --pre package-name 或 --pip install --pre -- upgrade package-name 进行测试。在许多情况下,预发行版或候选发行版可能没有为所有平台和版本组合构建车轮,因此更有可能遇到上述问题。
安装开发版本的注意事项
您也可以使用 pip 从 github 和其他位置安装开发版本的软件包,由于这类代码处于变动之中,不太可能为其构建轮子,因此任何不纯净的软件包都需要构建工具的存在,而且它们随时都可能被破坏,因此强烈建议用户只在虚拟环境中安装这类软件包。
因此,我们强烈建议用户只在虚拟环境中安装此类软件包:
- 下载压缩快照,大多数在线版本控制系统都有下载代码压缩快照的选项。可以手动下载,然后使用 “pip install path/to/downloaded/file ”进行安装,注意对于大多数压缩格式,pip 会将其解压到缓存区等。
- 让 pip 帮你处理下载和安装: pip install URL/of/package/repository - 您可能还需要使用 --trusted-host、--client-cert 和/或 --proxy标记才能正常工作,尤其是在企业环境中:
> py -3.5-32 -m venv demo-pip
> demo-pip\Scripts\activate.bat
> python -m pip install -U pip
Collecting pip
Using cached pip-9.0.1-py2.py3-none-any.whl
Installing collected packages: pip
Found existing installation: pip 8.1.1
Uninstalling pip-8.1.1:
Successfully uninstalled pip-8.1.1
Successfully installed pip-9.0.1
> pip install git+https://github.com/sphinx-doc/sphinx/
Collecting git+https://github.com/sphinx-doc/sphinx/
Cloning https://github.com/sphinx-doc/sphinx/ to c:\users\steve-~1\appdata\local\temp\pip-04yn9hpp-build
Collecting six>=1.5 (from Sphinx==1.7.dev20170506)
Using cached six-1.10.0-py2.py3-none-any.whl
Collecting Jinja2>=2.3 (from Sphinx==1.7.dev20170506)
Using cached Jinja2-2.9.6-py2.py3-none-any.whl
Collecting Pygments>=2.0 (from Sphinx==1.7.dev20170506)
Using cached Pygments-2.2.0-py2.py3-none-any.whl
Collecting docutils>=0.11 (from Sphinx==1.7.dev20170506)
Using cached docutils-0.13.1-py3-none-any.whl
Collecting snowballstemmer>=1.1 (from Sphinx==1.7.dev20170506)
Using cached snowballstemmer-1.2.1-py2.py3-none-any.whl
Collecting babel!=2.0,>=1.3 (from Sphinx==1.7.dev20170506)
Using cached Babel-2.4.0-py2.py3-none-any.whl
Collecting alabaster<0.8,>=0.7 (from Sphinx==1.7.dev20170506)
Using cached alabaster-0.7.10-py2.py3-none-any.whl
Collecting imagesize (from Sphinx==1.7.dev20170506)
Using cached imagesize-0.7.1-py2.py3-none-any.whl
Collecting requests>=2.0.0 (from Sphinx==1.7.dev20170506)
Using cached requests-2.13.0-py2.py3-none-any.whl
Collecting typing (from Sphinx==1.7.dev20170506)
Using cached typing-3.6.1.tar.gz
Requirement already satisfied: setuptools in f:\toolbuild\temp\demo-pip\lib\site-packages (from Sphinx==1.7.dev20170506)
Collecting sphinxcontrib-websupport (from Sphinx==1.7.dev20170506)
Downloading sphinxcontrib_websupport-1.0.0-py2.py3-none-any.whl
Collecting colorama>=0.3.5 (from Sphinx==1.7.dev20170506)
Using cached colorama-0.3.9-py2.py3-none-any.whl
Collecting MarkupSafe>=0.23 (from Jinja2>=2.3->Sphinx==1.7.dev20170506)
Using cached MarkupSafe-1.0.tar.gz
Collecting pytz>=0a (from babel!=2.0,>=1.3->Sphinx==1.7.dev20170506)
Using cached pytz-2017.2-py2.py3-none-any.whl
Collecting sqlalchemy>=0.9 (from sphinxcontrib-websupport->Sphinx==1.7.dev20170506)
Downloading SQLAlchemy-1.1.9.tar.gz (5.2MB)
100% |################################| 5.2MB 220kB/s
Collecting whoosh>=2.0 (from sphinxcontrib-websupport->Sphinx==1.7.dev20170506)
Downloading Whoosh-2.7.4-py2.py3-none-any.whl (468kB)
100% |################################| 471kB 1.1MB/s
Installing collected packages: six, MarkupSafe, Jinja2, Pygments, docutils, snowballstemmer, pytz, babel, alabaster, imagesize, requests, typing, sqlalchemy, whoosh, sphinxcontrib-websupport, colorama, Sphinx
Running setup.py install for MarkupSafe ... done
Running setup.py install for typing ... done
Running setup.py install for sqlalchemy ... done
Running setup.py install for Sphinx ... done
Successfully installed Jinja2-2.9.6 MarkupSafe-1.0 Pygments-2.2.0 Sphinx-1.7.dev20170506
alabaster-0.7.10 babel-2.4.0 colorama-0.3.9 docutils-0.13.1 imagesize-0.7.1 pytz-2017.2
requests-2.13.0 six-1.10.0 snowballstemmer-1.2.1 sphinxcontrib-websupport-1.0.0 sqlalchemy-1.1.9
typing-3.6.1 whoosh-2.7.4
注意 URL 的 git+ 前缀
- 使用 “git”、“mercurial ”或其他可接受的工具(最好是 DVCS 工具)克隆版本库,然后使用 “pip install path/to/cloned/repo- 这将处理任何 requires.text 文件并执行构建和设置步骤,你也可以手动将目录更改为克隆版本库,然后运行 ”pip install -r requires.txt 和 "python setup.py install以获得相同效果。这种方法的最大优点是,虽然初始克隆操作可能比快照下载耗时更长,但您可以使用git pull origin master更新到最新版本,如果当前版本包含错误,您可以使用pip uninstall package-name,然后使用git checkout`命令在版本库历史中回溯到早期版本并重新尝试。