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

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

itomcoil 2025-02-20 15:56 5 浏览

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

相关推荐

MySql安装与使用

介绍mysql是目前最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(RelationalDatabaseManagementSystem:关系数据库管理系统)应用软件...

使用AI来搭建一个用户系统,步骤应该是怎样的呢?

我给AI的第一个问题是这样的:创建一个java21+springboot3.4+mysql21的一个用户系统,需要使用JWT,支持多语言,使用swagger,这个用户系统都应该包含哪...

Mysql 8.4数据库安装、新建用户和数据库、表单

1、下载MySQL数据库yuminstall-ywgetperlnet-toolslibtirpc#安装wget和perl、net-tools、libtirpcwgethtt...

介绍如何在 MySQL 中创建新用户并授予权限?

MySQL是一个开源的关系型数据库管理系统,常用于存储和管理大量的结构化数据。在使用MySQL进行数据管理时,为了安全和方便管理,通常需要创建新用户并授予相应的权限。本文将介绍如何在MySQL...

Mysql创建用户和权限管理

MySQL是一个多用户的数据库,最高权限管理者是root用户,它拥有着最高的权限操作。包括select、update、delete、update、grant等操作。如果有其他用户想使用MySQL,那么...

Mysql:创建用户详解

1、创建并授权用户--创建可从任何主机连接的用户CREATEUSER'myuser'@'%'IDENTIFIEDBY'mypassword'...

Python 实现【字符匹配】

defis_match(s,pattern):m,n=len(s),len(pattern)dp=[[False]*(n+1)for_inrange...

Python自动化:openpyxl工作簿、工作表相关操作

新建工作簿、工作表importopenpyxl#创建空白工作簿,会自动生成一个工作表:Sheetwb=openpyxl.Workbook()#新建工作表#create_sheet...

python每日一练之三数排序

概述今天主要分享一个三树排序的实例,大家可以自己测试玩一下~需求输入三个整数x,y,z,请把这三个数由小到大输出。方法一:如果是要练练手就随便找个排序算法实现一下#usr/bin/python#...

Python输出语句print()

Python中的输出语句主要通过内置函数print()实现,它可以灵活输出文本、变量、表达式结果等内容到控制台或其他文件。以下是详细介绍及示例:一、print()基本语法print(*object...

Python设置excel表格格式,这3个属性6个模块,要表格好看

前言:通过前面两篇文章,我们用Python处理excel数据得到了结果并保存了文件。打开文件会发现,文件里表格是没有设置格式的,还需手动调整行高列宽等样式,很麻烦。其实,通过Python库模块,能轻松...

python入门-day5-循环语句

以下是为“Day5:循环语句”设计的详细学习任务计划。这个任务旨在帮助初学者掌握Python中的循环语句(for和while),并通过实践理解它们的应用场景。Day5:循环语句学习目标...

Python基础编程必备!涵盖常见语法与操作的代码示例合集

以下是一份Python基础代码示例合集,涵盖了常见的语法和操作,适合初学者快速掌握基本编程概念:1.基础语法python#打印输出print("Hello,World!")#变...

Python循环语句实用教程

一、循环基础1.while循环基本语法:while条件表达式:循环体代码while循环流程图:应用示例:#简单计数器count=0whilecount<5:...

在 Python 中如何向一个已排序的数组(列表) 中插入一个数呢

在Python中如何向一个已排序的数组(列表)中插入一个数呢?方法有很多种,关键在于原来数组是什么样的排序,用到啥排序方法效率高,就用哪种。我们来练习其中的几种插入方法,另外也掌握下遍历数组的...