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

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

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

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

相关推荐

软件测试/测试开发丨Pytest 自动化测试框架(五)

公众号搜索:TestingStudio霍格沃兹测试开发的干货都很硬核测试报告在项目中是至关重要的角色,一个好的测试报告:可以体现测试人员的工作量;开发人员可以从测试报告中了解缺陷的情况;测试经理可以...

python爬虫实战之Headers信息校验-Cookie

一、什么是cookie上期我们了解了User-Agent,这期我们来看下如何利用Cookie进行用户模拟登录从而进行网站数据的爬取。首先让我们来了解下什么是Cookie:Cookie指某些网站为了辨别...

软件测试 | 结合Allure生成测试报告

简介测试报告在项目至关重要,测试人员可以在测试报告中体现自己的工作量,开发人员可以从测试报告中了解缺陷的情况,测试经理可以从测试报告中看到测试人员的执行情况及测试用例的覆盖率,项目负责人可以通过测...

使用FUSE挖掘文件上传漏洞(文件上传漏洞工具)

关于FUSEFUSE是一款功能强大的渗透测试安全工具,可以帮助广大研究人员在最短的时间内迅速寻找出目标软件系统中存在的文件上传漏洞。FUSE本质上是一个渗透测试系统,主要功能就是识别无限制可执行文件上...

第42天,我终于意识到,爬虫这条路,真的好艰难

昨天说到学爬虫的最初四行代码,第四行中的print(res.text),我没太懂。为啥最后的输出的结果,不是显示百度网页全部的源代码呢?这个世界上永远不缺好心人。评论区的大神告诉我:因为只包含静态h...

详解Pytest单元测试框架,轻松搞定自动化测试实战

pytest是目前企业里面使用最多、最流行的Python的单元测试框架,那我们今天就使用这个框架来完成一个网易163邮箱登录的自动化实战案例。下面我们先把我们案例需要的工具进行相关的介绍:01pyt...

干货|Python大佬手把手带你破解哔哩哔哩网滑动验证(上篇)

/1前言/有爬虫经验的各位小伙伴都知道,正常我们需要登录才能获取信息的网站,是比较难爬的。原因就是在于,现在各大网站为了反爬,与爬虫机制斗智斗勇,一般的都加入了图片验证码、滑动验证码之类的干扰,让...

Python 爬虫-如何抓取需要登录的网页

本文是Python爬虫系列第四篇,前三篇快速入口:Python爬虫-开启数据世界的钥匙Python爬虫-HTTP协议和网页基础Python爬虫-使用requests和B...

使用Selenium实现微博爬虫:预登录、展开全文、翻页

前言想实现爬微博的自由吗?这里可以实现了!本文可以解决微博预登录、识别“展开全文”并爬取完整数据、翻页设置等问题。一、区分动态爬虫和静态爬虫1、静态网页静态网页是纯粹的HTML,没有后台数据库,不含程...

从零开始学Python——使用Selenium抓取动态网页数据

1.selenium抓取动态网页数据基础介绍1.1什么是AJAX  AJAX(AsynchronouseJavaScriptAndXML:异步JavaScript和XML)通过在后台与服务器进...

PHP自动测试框架Top 10(php单元测试工具)

对于很多PHP开发新手来说,测试自己编写的代码是一个非常棘手的问题。如果出现问题,他们将不知道下一步该怎么做。花费很长的时间调试PHP代码是一个非常不明智的选择,最好的方法就是在编写应用程序代码之前就...

10款最佳PHP自动化测试框架(php 自动化测试)

为什么测试如此重要?PHP开发新手往往不会测试自己编写的代码,我们中的大多数通过不断测试我们刚刚所编写浏览器窗口的新特性和功能来进行检测,但是当事情出现错误的时候我们往往不知道应该做些什么。为我们的代...

自动化运维:Selenium 测试(seleniumbase搭建自动化测试平台)

本文将以Buddy中的Selenium测试流水线示例,来看看自动化测试就是如此简单易用!Selenium是一套用于浏览器测试自动化的工具。使用Buddy专有服务,您可以直接在Buddy中运行Selen...

Selenium自动化测试(selenium自动化测试工具)

Selenium是一系列基于web的自动化测试工具。它提供了一系列测试函数,用于支持Web自动化测试。这些函数非常灵活,它们能够通过多种方式定位界面元素,并可以将预期结果与系统实际表现进行比较。作为一...

技术分享 | Web自动化之Selenium安装

本文节选自霍格沃兹测试开发学社内部教材Web应用程序的验收测试常常涉及一些手工任务,例如打开一个浏览器,并执行一个测试用例中所描述的操作。但是手工执行的任务容易出现人为的错误,也比较费时间。因此,将...