百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

python散装笔记——82: pip: PyPI 软件包管理器

liuian 2025-03-24 18:02 11 浏览

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 和其他位置安装开发版本的软件包,由于这类代码处于变动之中,不太可能为其构建轮子,因此任何不纯净的软件包都需要构建工具的存在,而且它们随时都可能被破坏,因此强烈建议用户只在虚拟环境中安装这类软件包。

因此,我们强烈建议用户只在虚拟环境中安装此类软件包:

  1. 下载压缩快照,大多数在线版本控制系统都有下载代码压缩快照的选项。可以手动下载,然后使用 “pip install path/to/downloaded/file ”进行安装,注意对于大多数压缩格式,pip 会将其解压到缓存区等。
  2. 让 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+ 前缀

  1. 使用 “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`命令在版本库历史中回溯到早期版本并重新尝试。

相关推荐

Docker 47 个常见故障的原因和解决方法

【作者】曹如熙,具有超过十年的互联网运维及五年以上团队管理经验,多年容器云的运维,尤其在Docker和kubernetes领域非常精通。Docker是一种相对使用较简单的容器,我们可以通过以下几种方式...

电脑30个快问快答,解决常见电脑问题

1.强行关机/停电对电脑有影响吗?答:可能损坏硬盘(机械硬盘风险高)、未保存数据丢失,偶尔一次影响小,但频繁操作会缩短硬件寿命。2.C盘满影响速度吗?答:会!系统运行需C盘空间缓存临时数据,空间不...

使用Tcpdump包抓取分析数据包的详细用法

TcpDump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。tcpdump就是一种...

电脑启动不了(BootDevice Not Found Hard Disk-3F0)解决方案

HP品牌机,开机启动不了,黑屏,开机取下主板电池恢复BIOS后,开机显示找不到启动盘。一、按F2键进入BIOS,出现硬盘内存检测界面的话,直接退出。就会出现这个界面,光标键向下,选择BIOSSetu...

电脑开机黑屏别慌!快码住!起底维修老师傅不能说的秘密

按下开机键却只收获黑屏大礼包?那些神秘的英文提示、刺耳的蜂鸣声,其实是电脑在给你发送求救信号!从按下电源到进入桌面的12秒里,你的电脑经历了史诗级的硬件自检与系统加载,今天我们就破译这段“摩斯电码”。...

电脑启动故障为何总要先看BIOS?新手必读的关键知识解析

最近在帮朋友们解答电脑无法正常开机的问题时,发现大家经常收到一句高频建议:“先检查BIOS”。对不少普通用户而言,BIOS依然是个神秘的存在。那么,BIOS到底是什么?电脑出现哪些故障会与它相关呢?本...

Windows 11 KB5053598更新:安全补丁还是系统噩梦?

2025年3月11日,微软发布了Windows1124H2的强制性更新KB5053598,作为“周二补丁日”(PatchTuesday)的一部分。然而,这款本应提升系统安全性的更新却引发了广泛的...

飞牛OS入门安装遇到问题,如何解决?

之前小编尝试了用旧电脑装飞牛OS安装之前特意查了一些硬件要求飞牛OS目前支持主流的x86架构硬件主机需能连网线飞牛OS暂时不支持只有无线网卡的安装貌似很多小伙伴在一开始安装就卡住了那今天咱们汇总分...

几种常见的电脑开机黑屏显示白色英文字母解决方法

当电脑开机出现黑屏并显示白色英文字母时,通常表示系统启动过程中遇到了错误。以下是几种常见原因及对应的解决方法,按照排查顺序整理:一、检查外接设备与硬件连接可能原因:外接U盘、移动硬盘等未拔出,或内部硬...

电脑启动出现问题,为什么都要先检查BIOS?

【ZOL中关村在线原创技巧应用】最近在回答问题的时候,总会发现很多朋友都在问“电脑无法正常开机怎么办?”这样类似的问题,而许多DIY大佬的回复总会出现一条高频建议“先检查BIOS”。但对于许多普通用户...

教你怎么用JavaScript检测当前浏览器是无头浏览器

什么是无头浏览器(headlessbrowser)?无头浏览器是指可以在图形界面情况下运行的浏览器。我可以通过编程来控制无头浏览器自动执行各种任务,比如做测试,给网页截屏等。为什么叫“无头”浏览器?...

12个高效的Python爬虫框架,你用过几个?

实现爬虫技术的编程环境有很多种,Java、Python、C++等都可以用来爬虫。但很多人选择Python来写爬虫,为什么呢?因为Python确实很适合做爬虫,丰富的第三方库十分强大,简单几行代码便可实...

运维的报表之路,用 node.js 轻松发送 grafana 报表

在运维过程中,无论是监控还是报表,都会有一些通过邮件发送图表的需求,由于开源的zabbix,grafana和kibana等并不完全具有“想发送哪儿就发送哪儿”的图片生成功能,在grafana...

C#基于浏览器内核的高级爬虫(c#爬取网页内容)

基于C#.NET+PhantomJS+Sellenium的高级网络爬虫程序。可执行Javascript代码、触发各类事件、操纵页面Dom结构、甚至可以移除不喜欢的CSS样式。很多网站都用Ajax动态加...

如何优化一个秒杀项目?(秒杀实现思路)

问题1:使用jmeter性能压测,定位瓶颈代码步骤流程:线程组--->Http请求--->查看结果树--->聚合报告tips:host的文件--->优先调用映射,减少DNS的时...