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

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

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

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

相关推荐

总结下SpringData JPA 的常用语法

SpringDataJPA常用有两种写法,一个是用Jpa自带方法进行CRUD,适合简单查询场景、例如查询全部数据、根据某个字段查询,根据某字段排序等等。另一种是使用注解方式,@Query、@Modi...

解决JPA在多线程中事务无法生效的问题

在使用SpringBoot2.x和JPA的过程中,如果在多线程环境下发现查询方法(如@Query或findAll)以及事务(如@Transactional)无法生效,通常是由于S...

PostgreSQL系列(一):数据类型和基本类型转换

自从厂子里出来后,数据库的主力就从Oracle变成MySQL了。有一说一哈,贵确实是有贵的道理,不是开源能比的。后面的工作里面基本上就是主MySQL,辅MongoDB、ES等NoSQL。最近想写一点跟...

基于MCP实现text2sql

目的:基于MCP实现text2sql能力参考:https://blog.csdn.net/hacker_Lees/article/details/146426392服务端#选用开源的MySQLMCP...

ORACLE 错误代码及解决办法

ORA-00001:违反唯一约束条件(.)错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。ORA-00017:请求会话以设置跟踪事件ORA-00018:超出最大会话数ORA-00...

从 SQLite 到 DuckDB:查询快 5 倍,存储减少 80%

作者丨Trace译者丨明知山策划丨李冬梅Trace从一开始就使用SQLite将所有数据存储在用户设备上。这是一个非常不错的选择——SQLite高度可靠,并且多种编程语言都提供了广泛支持...

010:通过 MCP PostgreSQL 安全访问数据

项目简介提供对PostgreSQL数据库的只读访问功能。该服务器允许大型语言模型(LLMs)检查数据库的模式结构,并执行只读查询操作。核心功能提供对PostgreSQL数据库的只读访问允许L...

发现了一个好用且免费的SQL数据库工具(DBeaver)

缘起最近Ai不是大火么,想着自己也弄一些开源的框架来捣腾一下。手上用着Mac,但Mac都没有显卡的,对于学习Ai训练模型不方便,所以最近新购入了一台4090的拯救者,打算用来好好学习一下Ai(呸,以上...

微软发布.NET 10首个预览版:JIT编译器再进化、跨平台开发更流畅

IT之家2月26日消息,微软.NET团队昨日(2月25日)发布博文,宣布推出.NET10首个预览版更新,重点改进.NETRuntime、SDK、libraries、C#、AS...

数据库管理工具Navicat Premium最新版发布啦

管理多个数据库要么需要使用多个客户端应用程序,要么找到一个可以容纳你使用的所有数据库的应用程序。其中一个工具是NavicatPremium。它不仅支持大多数主要的数据库管理系统(DBMS),而且它...

50+AI新品齐发,微软Build放大招:拥抱Agent胜算几何?

北京时间5月20日凌晨,如果你打开微软Build2025开发者大会的直播,最先吸引你的可能不是一场原本属于AI和开发者的技术盛会,而是开场不久后的尴尬一幕:一边是几位微软员工在台下大...

揭秘:一条SQL语句的执行过程是怎么样的?

数据库系统能够接受SQL语句,并返回数据查询的结果,或者对数据库中的数据进行修改,可以说几乎每个程序员都使用过它。而MySQL又是目前使用最广泛的数据库。所以,解析一下MySQL编译并执行...

各家sql工具,都闹过哪些乐子?

相信这些sql工具,大家都不陌生吧,它们在业内绝对算得上第一梯队的产品了,但是你知道,他们都闹过什么乐子吗?首先登场的是Navicat,这款强大的数据库管理工具,曾经让一位程序员朋友“火”了一把。Na...

详解PG数据库管理工具--pgadmin工具、安装部署及相关功能

概述今天主要介绍一下PG数据库管理工具--pgadmin,一起来看看吧~一、介绍pgAdmin4是一款为PostgreSQL设计的可靠和全面的数据库设计和管理软件,它允许连接到特定的数据库,创建表和...

Enpass for Mac(跨平台密码管理软件)

还在寻找密码管理软件吗?密码管理软件有很多,但是综合素质相当优秀且完全免费的密码管理软件却并不常见,EnpassMac版是一款免费跨平台密码管理软件,可以通过这款软件高效安全的保护密码文件,而且可以...