pip:带你认识一个 Python 开发工作流程中的重要工具
source link: https://juejin.cn/post/7083740907421466632
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
本文分享自华为云社区《使用Python的pip管理项目的依赖关系》,作者:Yuchuan。
Python的标准包管理器是pip
. 它允许您安装和管理不属于Python 标准库的包。如果您正在寻找 的介绍pip
,那么您来对地方了!
在本教程中,您将学习如何:
- pip在您的工作环境中设置
- 修复与使用相关的常见错误
pip
- 安装和卸载软件包
pip
- 使用需求文件管理项目的依赖关系
开始使用pip
那么,具体是pip
做什么的呢?pip
是Python的**包管理器。**这意味着它是一个允许您安装和管理不作为标准库的一部分分发的库和依赖项的工具。pip这个名字是由 Ian Bicking 在 2008 年提出的:
我已将 pyinstall 重命名为新名称:pip。名称 pip 是 [an] 首字母缩写词和声明: pip 安装包。(来源)
包管理非常重要,以至于 Python 的安装程序pip
从 3.4 和 2.7.9 版本开始就分别针对 Python 3 和 Python 2 进行了安装。许多 Python 项目使用pip
,这使其成为每个 Pythonista 的必备工具。
如果您来自另一种编程语言,那么您可能对包管理器的概念很熟悉。JavaScript使用npm进行包管理,Ruby使用gem,.NET 平台使用NuGet。在 Python 中,pip
已经成为标准的包管理器。
pip
在您的系统上查找
Python 3 安装程序为您在pip
系统上安装 Python 时提供了安装选项。事实上,pip
使用 Python 安装的选项是默认勾选的,所以pip
安装 Python 后应该就可以使用了。
**注意:**在某些 Linux (Unix) 系统(如 Ubuntu)上,有pip
一个名为. 解释器默认不安装它。python3-pip``sudo apt install python3-pip
pip
您可以通过在系统上查找pip3
可执行文件来验证它是否可用。在下面选择您的操作系统并相应地使用您的平台特定命令:
- Linux + macOS
C:\> where pip3
复制代码
Windows 上的where
命令会告诉你在哪里可以找到pip3
. 如果 Windows 找不到名为 的可执行文件pip3
,那么您也可以尝试在末尾pip
不带三个 ( ) 的情况下查找。3
在 Windows 和 Unix 系统上,pip3
可能会在多个位置找到。当您安装了多个 Python 版本时,可能会发生这种情况。如果您在系统上的任何位置都找不到pip
,那么您可以考虑重新安装 pip。
除了pip
直接运行系统,您还可以将其作为 Python 模块运行。在下一节中,您将了解如何操作。
pip
作为模块运行
当您pip
直接运行您的系统时,该命令本身不会显示pip
属于哪个 Python 版本。不幸的是,这意味着您可以pip
在不注意的情况下将包安装到旧 Python 版本的站点包中。为了防止这种情况发生,您可以pip
作为 Python 模块运行:
$ python3 -m pip
复制代码
请注意,您使用python3 -m
运行pip
. 该-m
开关告诉 Python 将模块作为python3
解释器的可执行文件运行。这样,您可以确保您的系统默认 Python 3 版本运行该pip
命令。如果您想了解更多关于这种跑步方式的信息pip
,那么您可以阅读 Brett Cannon 关于使用python3 -m pip
.
有时您可能希望更加明确并将包限制为特定项目。在这种情况下,您应该pip
在虚拟环境中运行。
pip
在 Python 虚拟环境中使用
为避免将包直接安装到系统 Python 安装中,您可以使用虚拟环境。虚拟环境为您的项目提供了一个独立的 Python 解释器。您在此环境中使用的任何包都将独立于您的系统解释器。这意味着您可以将项目的依赖项与其他项目和整个系统分开。
pip
在虚拟环境中使用具有三个主要优点。你可以:
- 确保您为手头的项目使用正确的 Python 版本
- 确信您在运行时引用了正确的pip实例
pip
或pip3
- 在不影响其他项目的情况下为您的项目使用特定的包版本
venv
Python 3 具有用于创建虚拟环境的内置模块。此模块可帮助您使用隔离的 Python 安装创建虚拟环境。激活虚拟环境后,您可以将软件包安装到此环境中。您安装到一个虚拟环境中的软件包与系统上的所有其他环境隔离。
您可以按照以下步骤创建虚拟环境并验证您是否pip
在新创建的环境中使用该模块:
- Linux + macOS
C:\> python -m venv venv
C:\> venv\Scripts\activate.bat
(venv) C:\> pip3 --version
pip 21.2.3 from ...\lib\site-packages\pip (python 3.10)
(venv) C:\> pip --version
pip 21.2.3 from ...\lib\site-packages\pip (python 3.10)
复制代码
venv
在这里,您使用 Python 的内置venv
模块创建一个虚拟环境。然后你用source
命令激活它。()
您的姓名周围的括号 ( )venv
表示您已成功激活虚拟环境。
最后,检查激活的虚拟环境中的pip3
和可执行文件的版本。pip
两者都指向同一个pip
模块,因此一旦您的虚拟环境被激活,您就可以使用pip
或pip3
。
pip
发生错误时重新安装
运行pip
命令时,在某些情况下可能会出现错误。您的具体错误消息将取决于您的操作系统:
操作系统错误信息视窗'pip' is not recognized as an internal or external command,
operable program or batch file.
Linuxbash: pip: command not found
苹果系统zsh: command not found: pip
类似这样的错误消息表明安装pip
.
注意:pip
当命令不起作用时,在开始任何故障排除之前,您可以尝试使用末尾pip3
带有三个( )的命令。3
出现上面显示的错误可能会令人沮丧,因为pip
对于安装和管理外部软件包至关重要。一些常见问题与pip
此工具在您的系统上的安装方式有关。
尽管不同系统的错误消息不同,但它们都指向同一个问题:您的系统在变量pip
中列出的位置中找不到。PATH
在 Windows 上,PATH
是系统变量的一部分。在 macOS 和 Linux 上,PATH
是环境变量的一部分。您可以PATH
使用以下命令检查变量的内容:
- Linux + macOS
C:\> echo %PATH%
复制代码
此命令的输出将显示磁盘上操作系统查找可执行程序的位置(目录)列表。根据您的系统,位置可以用冒号 ( :
) 或分号 ( ;
) 分隔。
默认情况下,安装 Python 或创建虚拟环境后,包含pip
可执行文件的目录应该存在。PATH
然而,失踪pip
是一个普遍的问题。两种受支持的方法可以帮助您pip
再次安装并将其添加到您的PATH
:
ensurepip
模块_get-pip.py
脚本_
自 Python 3.4 以来,该ensurepip
模块一直是标准库的一部分。添加它是为了为您提供一种直接的重新安装方式,pip
例如,如果您在安装 Python 时跳过它或pip
在某个时候卸载了它。在下面选择您的操作系统并ensurepip
相应地运行:
- Linux + macOS
C:\> python -m ensurepip --upgrade
复制代码
如果pip
尚未安装,则此命令会将其安装在您当前的 Python 环境中。如果您处于活动的虚拟环境中,则该命令会安装pip
到该环境中。否则,它将pip
全局安装在您的系统上。该--upgrade
选项确保pip
版本与 中声明的版本相同ensurepip
。
**注意:**模块ensurepip
不上网。可以安装的最新版本pip
是ensurepip
捆绑在您环境的 Python 安装中的版本。例如,ensurepip
使用 Python 3.10.0 运行会安装pip
21.2.3。如果你想要一个更新的pip
版本,那么你需要先运行ensurepip
. 之后,您可以pip
手动更新到其最新版本。
修复pip
安装的另一种方法是使用get-pip.py
脚本。该get-pip.py
文件包含pip
编码ZIP 文件的完整副本。您可以get-pip.py
直接从PyPA 引导页面下载。一旦你的机器上有脚本,你就可以像这样运行 Python 脚本:
- Linux + macOS
C:\> python get-pip.py
复制代码
此脚本将在您当前的 Python 环境中安装最新版本的pip
、setuptools
和。wheel
如果您只想安装pip
,那么您可以将--no-setuptools
和--no-wheel
选项添加到您的命令中。
如果上述方法都不起作用,那么可能值得尝试为您当前平台下载最新的Python 版本。您可以遵循Python 3 安装和设置指南,以确保pip
已正确安装并且可以正常工作。
安装软件包pip
Python被认为是一种包含电池的语言。这意味着Python 标准库包含一组广泛的包和模块,以帮助开发人员完成他们的编码项目。
同时,Python 拥有一个活跃的社区,该社区提供了更广泛的包集,可以帮助您满足开发需求。这些包发布到Python 包索引,也称为PyPI(发音为Pie Pea Eye)。
PyPI 托管大量包,包括开发框架、工具和库。其中许多包为 Python 标准库的功能提供了友好的接口。
使用 Python 包索引 (PyPI)
PyPI 托管的众多软件包之一称为requests
. 该库通过抽象HTTP请求的复杂性requests
来帮助您与 Web 服务进行交互。您可以在其官方文档网站上了解所有相关信息。requests
当你想requests
在你的项目中使用这个包时,你必须首先将它安装到你的环境中。如果你不想在你的系统 Python 站点包中安装它,那么你可以先创建一个虚拟环境,如上图所示。
创建并激活虚拟环境后,命令行提示符会在括号内显示虚拟环境的名称。您从现在开始执行的任何pip
命令都将在您的虚拟环境中发生。
要安装软件包,请pip
提供一个install
命令。您可以运行它来安装requests
软件包:
- Linux + macOS
(venv) C:\> python -m pip install requests
复制代码
在此示例中,您pip
使用install
命令运行,后跟要安装的包的名称。该pip
命令在 PyPI 中查找包,解析其依赖项,并在当前 Python 环境中安装所有内容以确保其requests
正常工作。
该pip install <package>
命令始终查找最新版本的软件包并安装它。它还搜索包元数据中列出的依赖项并安装它们以确保包具有所需的所有要求。
也可以在一个命令中安装多个包:
- Linux + macOS
(venv) C:\> python -m pip install rptree codetiming
复制代码
通过链接包rptree
并codetiming
在pip install
命令中,您可以一次安装两个包。您可以在pip install
命令中添加任意数量的包。在这种情况下,requirements.txt
文件可以派上用场。在本教程的后面部分,您将学习如何使用一个requirements.txt
文件一次安装多个包。
**注意:**除非包的特定版本号与本教程相关,否则您会注意到版本字符串采用x.y.z
. 这是一种占位符格式,可以代表3.1.4
、2.9
或任何其他版本号。当您继续操作时,终端中的输出将显示您的实际包版本号。
您可以使用该list
命令显示安装在您的环境中的软件包及其版本号:
- Linux + macOS
(venv) C:\> python -m pip list
Package Version
------------------ ---------
certifi x.y.z
charset-normalizer x.y.z
codetiming x.y.z
idna x.y.z
pip x.y.z
requests x.y.z
rptree x.y.z
setuptools x.y.z
urllib3 x.y.z
复制代码
该pip list
命令呈现一个表格,显示当前环境中所有已安装的包。上面的输出使用x.y.z
占位符格式显示包的版本。在您的环境中运行该pip list
命令时,pip
会显示您为每个包安装的特定版本号。
要获取有关特定包的更多信息,您可以使用以下show
命令查看包的元数据pip
:
- Linux + macOS
(venv) C:\> python -m pip show requests
Name: requests
Version: x.y.z
Summary: Python HTTP for Humans.
...
Requires: certifi, idna, charset-normalizer, urllib3
Required-by:
复制代码
您系统上此命令的输出将列出包的元数据。该Requires
行列出了包,例如certifi
、idna
、charset-normalizer
和urllib3
。这些是安装的,因为requests
依赖于它们才能正常工作。
现在您已经安装requests
了它及其依赖项,您可以像导入Python 代码中的任何其他常规包一样导入它。启动交互式 Python 解释器并导入requests
包:
>>>
>>> import requests
>>> requests.__version__
"x.y.z"
复制代码
启动交互式 Python 解释器后,您导入了requests
模块。通过调用requests.__version__
,您确认您正在requests
虚拟环境中使用该模块。
使用自定义包索引
默认情况下,pip
使用 PyPI 查找包。但pip
也为您提供了定义自定义包索引的选项。
pip
当 PyPI 域在您的网络上被阻止或您想要使用不公开可用的包时,使用自定义索引会很有帮助。有时系统管理员也会创建自己的内部包索引,以更好地控制pip
公司网络上的用户可以使用哪些包版本。
自定义包索引必须符合PEP 503 – Simple Repository API to work with pip
. 您可以通过访问PyPI 简单索引来了解此类API(应用程序编程接口)的外观——但请注意,这是一个包含许多难以解析的内容的大页面。任何遵循相同 API 的自定义索引都可以作为该选项的目标。除了键入,您还可以使用速记。--index-url``--index-url``-i
例如,要从TestPyPIrptree
包索引安装该工具,您可以运行以下命令:
- Linux + macOS
(venv) C:\> python -m pip install -i https://test.pypi.org/simple/ rptree
复制代码
使用该-i
选项,您告诉pip
查看不同的包索引而不是默认的 PyPI。在这里,您是rptree
从 TestPyPI 而不是从 PyPI 安装的。您可以使用 TestPyPI 来微调Python 包的发布过程,而不会弄乱 PyPI 上的生产包索引。
如果您需要永久使用替代索引,则可以在配置文件index-url
中设置该选项。该文件名为,您可以通过运行以下命令找到它的位置:pip
pip.conf
- Linux + macOS
(venv) C:\> python -m pip config list -vv
复制代码
使用该pip config list
命令,您可以列出活动配置。此命令仅在您设置了自定义配置时才会输出。否则,输出为空。那时,additive--verbose
或-vv
, 选项可能会有所帮助。添加 时-vv
,pip
会显示它在哪里查找不同的配置级别。
如果要添加pip.conf
文件,则可以选择pip config list -vv
列出的位置之一。具有自定义包索引的pip.conf
文件如下所示:
# pip.conf
[global]
index-url = https://test.pypi.org/simple/
复制代码
当你有这样的pip.conf
文件时,pip
将使用定义index-url
的来查找包。使用此配置,您无需--index-url
在命令中使用选项pip install
来指定您只需要可以在TestPyPI的简单 API中找到的包。
从 GitHub 存储库安装包
您不仅限于托管在 PyPI 或其他包索引上的包。pip
还提供了从GitHub 存储库安装包的选项。但即使包托管在 PyPI 上,例如Real Python 目录树生成器,您也可以选择从其Git 存储库安装它:
- Linux + macOS
(venv) C:\> python -m pip install git+https://github.com/realpython/rptree
复制代码
使用该git+https
方案,您可以指向包含可安装包的 Git 存储库。您可以通过运行交互式 Python 解释器并导入来验证您是否正确安装了包rptree
:
>>>
>>> import rptree
>>> rptree.__version__
"x.y.z"
复制代码
启动交互式 Python 解释器后,导入rptree
模块。通过调用rptree.__version__
,您可以验证您正在使用rptree
基于虚拟环境的模块。
**注意:**如果您使用的是 Git 以外的版本控制系统 (VCS),pip
您是否了解过。要了解如何使用pip
Mercurial、Subversion 或 Bazaar,请查看文档的VCS支持章节pip
。
如果包不是托管在 PyPI 上但具有远程 Git 存储库,则从 Git 存储库安装包会很有帮助。您指向的远程存储库pip
甚至可以托管在公司 Intranet 上的内部 Git 服务器上。当您在防火墙后面或对 Python 项目有其他限制时,这可能很有用。
以可编辑模式安装包以简化开发
在处理自己的包时,以可编辑模式安装它是有意义的。通过这样做,您可以像在任何其他包中一样使用命令行,同时处理源代码。一个典型的工作流程是首先克隆存储库,然后pip
将其作为可编辑包安装到您的环境中:
- Linux + macOS
1C:\> git clone https://github.com/realpython/rptree
2C:\> cd rptree
3C:\rptree> python3 -m venv venv
4C:\rptree> venv\Scripts\activate.bat
5(venv) C:\rptree> python -m pip install -e .
复制代码
使用上面的命令,您将rptree
包安装为可编辑模块。以下是您刚刚执行的操作的分步细分:
- 第 1 行克隆了
rptree
包的 Git 存储库。 - 第 2行将工作目录更改为
rptree/
. - 第 3 行和第 4 行创建并激活了一个虚拟环境。
- 第 5行将当前目录的内容安装为可编辑的包。
-e
选项是选项的简写--editable
。当您使用带有 的-e
选项时pip install
,您告诉pip
您要以可编辑模式安装包。不使用包名,而是使用点 ( .
) 来指向pip
当前目录。
如果您没有使用该-e
标志,pip
则通常会将软件包安装到您的环境site-packages/
文件夹中。当您以可编辑模式安装包时,您将在站点包中创建指向本地项目路径的链接:
~/rptree/venv/lib/python3.10/site-packages/rptree.egg-link
复制代码
使用pip install
带有标志的命令-e
只是pip install
提供的众多选项之一。您可以查看文档中的pip install
示例。pip
在那里,您将学习如何安装特定版本的包或指向pip
不是 PyPI 的不同索引。
在下一部分中,您将了解需求文件如何帮助您的pip
工作流程。
使用需求文件
该pip install
命令始终安装包的最新发布版本,但有时您的代码需要特定的包版本才能正常工作。
您希望创建用于开发和测试应用程序的依赖项和版本的规范,以便在生产中使用该应用程序时不会感到意外。
当您与其他开发人员共享您的 Python 项目时,您可能希望他们使用与您正在使用的相同版本的外部包。可能某个包的特定版本包含您依赖的新功能,或者您正在使用的包的版本与以前的版本不兼容。
这些外部依赖项也称为需求。您经常会发现 Python 项目将其需求固定在一个名为requirements.txt
或类似的文件中。需求文件格式允许您精确指定应该安装哪些包和版本。
运行pip help
显示有一个freeze
命令以需求格式输出已安装的包。您可以使用此命令,将输出重定向到文件以生成需求文件:
- Linux + macOS
(venv) C:\> python -m pip freeze > requirements.txt
复制代码
requirements.txt
此命令在您的工作目录中创建一个文件,其内容如下:
certifi==x.y.z
charset-normalizer==x.y.z
idna==x.y.z
requests==x.y.z
urllib3==x.y.z
复制代码
请记住,x.y.z
上面显示的是包版本的占位符格式。您的requirements.txt
文件将包含真实的版本号。
该freeze
命令将当前安装的包的名称和版本转储到标准输出。您可以将输出重定向到一个文件,您以后可以使用该文件将您的确切要求安装到另一个系统中。您可以随意命名需求文件。然而,一个被广泛采用的约定是命名它requirements.txt
。
当您想在另一个系统中复制环境时,您可以运行pip install
,使用-r
开关指定需求文件:
- Linux + macOS
(venv) C:\> python -m pip install -r requirements.txt
复制代码
在上面的命令中,您告诉pip
将列出的软件包安装requirements.txt
到当前环境中。包版本将匹配requirements.txt
文件包含的版本约束。您可以运行pip list
以显示刚刚安装的软件包及其版本号:
- Linux + macOS
(venv) C:\> python -m pip list
Package Version
------------------ ---------
certifi x.y.z
charset-normalizer x.y.z
idna x.y.z
pip x.y.z
requests x.y.z
setuptools x.y.z
urllib3 x.y.z
复制代码
现在您已准备好分享您的项目!您可以提交requirements.txt
到 Git 等版本控制系统,并使用它在其他机器上复制相同的环境。但是等等,如果为这些软件包发布了新的更新会发生什么?
对包的版本和依赖项进行硬编码的问题在于,包会经常使用错误和安全修复进行更新。您可能希望在这些更新发布后立即利用它们。
需求文件格式允许您使用比较运算符指定依赖版本,这使您可以灵活地确保更新包,同时仍定义包的基本版本。
requirements.txt
在您喜欢的编辑器中打开并将相等运算符 ( ==
) 转换为大于或等于运算符 ( >=
),如下例所示:
# requirements.txt
certifi>=x.y.z
charset-normalizer>=x.y.z
idna>=x.y.z
requests>=x.y.z
urllib3>=x.y.z
复制代码
您可以将比较运算符更改>=
为告诉pip
安装已发布的确切或更高版本。当您使用该requirements.txt
文件设置新环境时,pip
查找满足要求的最新版本并安装它。
接下来,您可以通过使用开关或简写运行install
命令来升级需求文件中的软件包:--upgrade``-U
- Linux + macOS
(venv) C:\> python -m pip install -U -r requirements.txt
复制代码
如果列出的软件包有新版本可用,则该软件包将被升级。
在理想情况下,新版本的包将向后兼容并且永远不会引入新的错误。不幸的是,新版本可能会引入会破坏您的应用程序的更改。为了微调您的需求,需求文件语法支持额外的版本说明符。
想象一下,发布了一个新版本,3.0
但requests
引入了一个不兼容的更改,从而破坏了您的应用程序。您可以修改需求文件以防止3.0
或更高版本被安装:
# requirements.txt
certifi==x.y.z
charset-normalizer==x.y.z
idna==x.y.z
requests>=x.y.z, <3.0
urllib3==x.y.z
复制代码
更改包的版本说明符可确保不会安装requests
任何大于或等于的版本。3.0
该pip
文档提供了有关需求文件格式的大量信息,您可以查阅它以了解更多信息。
分离生产和开发依赖
并非您在应用程序开发过程中安装的所有软件包都是生产依赖项。例如,您可能想要测试您的应用程序,因此您需要一个测试框架。一个流行的测试框架是pytest
. 您想将它安装在您的开发环境中,但您不希望它在您的生产环境中,因为它不是生产依赖项。
您创建第二个需求文件 ,requirements_dev.txt
以列出用于设置开发环境的其他工具:
# requirements_dev.txt
pytest>=x.y.z
复制代码
拥有两个需求文件将要求您使用pip
它们来安装它们,requirements.txt
并且requirements_dev.txt
. 幸运的是,pip
允许您在需求文件中指定其他参数,因此您可以修改requirements_dev.txt
以安装生产requirements.txt
文件中的需求:
# requirements_dev.txt
-r requirements.txt
pytest>=x.y.z
复制代码
请注意,您使用相同的-r
开关来安装生产requirements.txt
文件。现在,在您的开发环境中,您只需运行这个命令即可安装所有要求:
- Linux + macOS
(venv) C:\> python -m pip install -r requirements_dev.txt
复制代码
因为requirements_dev.txt
包含该-r requirements.txt
行,所以您不仅要安装,还要pytest
安装requirements.txt
. 在生产环境中,仅安装生产要求就足够了:
- Linux + macOS
(venv) C:\> python -m pip install -r requirements.txt
复制代码
使用此命令,您可以安装requirements.txt
. 与您的开发环境相比,您的生产环境不会pytest
安装。
生产冷冻要求
您创建了生产和开发需求文件并将它们添加到源代码控制中。这些文件使用灵活的版本说明符来确保您利用依赖项发布的错误修复。您还测试了您的应用程序,现在可以将其部署到生产环境中。
您知道所有测试都通过并且应用程序与您在开发过程中使用的依赖项一起工作,因此您可能希望确保将相同版本的依赖项部署到生产环境。
当前版本说明符不保证相同的版本将部署到生产中,因此您希望在发布项目之前冻结生产需求。
根据当前需求完成开发后,创建当前项目新版本的工作流程如下所示:
步命令解释1pytest
运行您的测试并验证您的代码是否正常工作。2pip install -U -r requirements.txt
将您的要求升级到与文件中的约束匹配的版本requirements.txt
。3pytest
运行您的测试并考虑降级任何向您的代码引入错误的依赖项。4pip freeze > requirements_lock.txt
一旦项目正常工作,将依赖项冻结到一个requirements_lock.txt
文件中。
通过这样的工作流程,该requirements_lock.txt
文件将包含准确的版本说明符,并可用于复制您的环境。您已确保当您的用户将列出的软件包安装requirements_lock.txt
到他们自己的环境中时,他们将使用您希望他们使用的版本。
冻结您的需求是确保您的 Python 项目在用户环境中以与在您的环境中相同的方式工作的重要步骤。
卸载软件包pip
有时,您必须卸载一个软件包。要么你找到了一个更好的库来替换它,要么它是你不需要的东西。卸载软件包可能有点棘手。
请注意,当您安装时requests
,您还pip
必须安装其他依赖项。您安装的包越多,多个包依赖相同依赖项的机会就越大。这就是show
命令 inpip
派上用场的地方。
在卸载软件包之前,请确保运行该show
软件包的命令:
- Linux + macOS
(venv) C:\> python -m pip show requests
Name: requests
Version: 2.26.0
Summary: Python HTTP for Humans.
Home-page: https://requests.readthedocs.io
Author: Kenneth Reitz
Author-email: [email protected]
License: Apache 2.0
Location: .../python3.9/site-packages
Requires: certifi, idna, charset-normalizer, urllib3
Required-by:
复制代码
注意最后两个字段Requires
和Required-by
。该show
命令告诉您requests
需要certifi
、idna
、charset-normalizer
和urllib3
。您可能也想卸载这些。请注意,requests
任何其他软件包都不需要。所以卸载它是安全的。
您应该show
针对所有依赖项运行该命令,requests
以确保没有其他库也依赖于它们。一旦了解了要卸载的软件包的依赖顺序,就可以使用以下uninstall
命令删除它们:
- Linux + macOS
(venv) C:\> python -m pip uninstall certifi
复制代码
该uninstall
命令向您显示将被删除的文件并要求确认。如果您确定要删除包,因为您已经检查了它的依赖关系并且知道没有其他东西在使用它,那么您可以传递一个-y
开关来禁止文件列表和确认对话框:
- Linux + macOS
(venv) C:\> python -m pip uninstall urllib3 -y
复制代码
在这里你卸载urllib3
。使用该-y
开关,您可以抑制询问您是否要卸载此软件包的确认对话框。
在一次调用中,您可以指定要卸载的所有包:
- Linux + macOS
(venv) C:\> python -m pip uninstall -y charset-normalizer idna requests
复制代码
您可以将多个包传递给pip uninstall
命令。如果您没有添加任何额外的开关,那么您需要确认卸载每个包。通过传递-y
开关,您可以在没有任何确认对话框的情况下将它们全部卸载。
您还可以通过提供-r <requirements file>
选项来卸载需求文件中列出的所有包。此命令将提示每个包的确认请求,但您可以使用-y
开关抑制它:
- Linux + macOS
(venv) C:\> python -m pip uninstall -r requirements.txt -y
复制代码
请记住始终检查要卸载的软件包的依赖关系。您可能想卸载所有依赖项,但卸载其他人使用的包会破坏您的工作环境。因此,您的项目可能不再正常工作。
如果您在虚拟环境中工作,只需创建一个新的虚拟环境就可以减少工作量。然后您可以安装您需要的软件包,而不是尝试卸载您不需要的软件包。但是,pip uninstall
当您需要从系统 Python 安装中卸载包时,它会非常有用。pip uninstall
如果您不小心在系统范围内安装了软件包,使用是一种整理系统的好方法。
探索替代方案pip
Python 社区提供了出色的工具和库供您在pip
. pip
这些包括尝试简化和改进包管理的替代方案。
以下是可用于 Python 的其他一些包管理工具:
工具描述康达Conda是包括 Python 在内的多种语言的包、依赖项和环境管理器。它来自Anaconda,它最初是 Python 的数据科学包。因此,它被广泛用于数据科学和机器学习应用程序。Conda 运行自己的索引来托管兼容的软件包。诗歌如果您来自JavaScript和npm ,诗歌对您来说会非常熟悉。Poetry 超越了包管理,帮助您为应用程序和库构建发行版并将它们部署到 PyPI。PipenvPipenv是另一个包管理工具,它将虚拟环境和包管理合并在一个工具中。Pipenv: A Guide to the New Python Packaging Tool是开始学习 Pipenv 及其包管理方法的好地方。
仅pip
捆绑在标准 Python 安装中。如果您想使用上面列出的任何替代方案,则必须遵循其文档中的安装指南。有这么多选择,您一定会找到适合您的编程之旅的工具!
许多 Python 项目使用pip
包管理器来管理它们的依赖项。它包含在 Python 安装程序中,是 Python 中依赖项管理的重要工具。
在本教程中,您学习了如何:
pip
在您的工作环境中设置和运行- 修复与使用相关的常见错误
pip
- 安装和卸载软件包
pip
- 定义项目和应用程序的要求
- 在需求文件中固定依赖项
此外,您还了解了使依赖项保持最新的重要性以及pip
可以帮助您管理这些依赖项的替代方法。
通过仔细查看pip
,您已经探索了 Python 开发工作流程中的一个重要工具。使用,您可以安装和管理在PyPIpip
上找到的任何其他包。您可以使用来自其他开发人员的外部包作为需求,并专注于使您的项目独一无二的代码。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK