使用 pip 和 venv 在虚拟环境中安装包#

本指南讨论如何使用标准库的虚拟环境工具 venv 创建和激活虚拟环境并安装包。本指南涵盖如何

  • 创建和激活虚拟环境

  • 准备 pip

  • 使用 pip 命令将包安装到虚拟环境中

  • 使用和创建需求文件

注意

本指南适用于受支持的 Python 版本,目前为 3.8 及更高版本。

注意

本指南使用术语 来指代 发行包,通常从外部主机安装。这与术语 导入包 不同,后者指的是在 Python 源代码中导入模块。

重要

本指南的前提是您使用的是从 <https://pythonlang.cn/downloads/> 获得的官方 Python 版本。如果您使用操作系统软件包管理器来安装 Python,请确保在继续执行这些步骤之前已安装 Python。

创建和使用虚拟环境#

创建新的虚拟环境#

venv(对于 Python 3)允许您为不同的项目管理单独的包安装。它创建一个“虚拟”的隔离 Python 安装。当您切换项目时,您可以创建一个新的虚拟环境,该环境与其他虚拟环境隔离。您可以从虚拟环境中受益,因为可以放心地安装包,并且不会干扰其他项目的环境。

提示

在使用第三方包时,建议使用虚拟环境。

要创建虚拟环境,请转到项目的目录并运行以下命令。这将在名为 .venv 的本地文件夹中创建一个新的虚拟环境

python3 -m venv .venv
py -m venv .venv

第二个参数是创建虚拟环境的位置。通常,您可以在项目中创建它并将其称为 .venv

venv 将在 .venv 文件夹中创建一个虚拟 Python 安装。

注意

您应该使用 .gitignore 或类似方法将虚拟环境目录排除在版本控制系统之外。

激活虚拟环境#

在虚拟环境中开始安装或使用软件包之前,你需要activate它。激活虚拟环境会将虚拟环境特定的pythonpip可执行文件放入 shell 的PATH中。

source .venv/bin/activate
.venv\Scripts\activate

要确认虚拟环境已激活,请检查 Python 解释器的路径

which python
where python

当虚拟环境处于活动状态时,上述命令将输出一个文件路径,其中包括.venv目录,并以以下内容结尾

.venv/bin/python
.venv\Scripts\python

当虚拟环境处于激活状态时,pip 会将软件包安装到该特定环境中。这使你能够在 Python 应用程序中导入和使用软件包。

停用虚拟环境#

如果你想切换项目或离开虚拟环境,请deactivate环境

deactivate

注意

关闭 shell 会停用虚拟环境。如果你打开一个新的 shell 窗口并想使用虚拟环境,请重新激活它。

重新激活虚拟环境#

如果你想重新激活现有的虚拟环境,请按照激活虚拟环境的相同说明进行操作。无需创建新的虚拟环境。

准备 pip#

pip是参考 Python 软件包管理器。它用于将软件包安装和更新到虚拟环境中。

macOS 的 Python 安装程序包括 pip。在 Linux 上,你可能需要安装其他软件包,例如python3-pip。你可以通过运行以下命令来确保 pip 是最新的

python3 -m pip install --upgrade pip
python3 -m pip --version

之后,你应该在用户站点中安装最新版本的 pip

pip 23.3.1 from .../.venv/lib/python3.9/site-packages (python 3.9)

Windows 的 Python 安装程序包括 pip。你可以通过运行以下命令来确保 pip 是最新的

py -m pip install --upgrade pip
py -m pip --version

之后,你应该拥有最新版本的 pip

pip 23.3.1 from .venv\lib\site-packages (Python 3.9.4)

使用 pip 安装软件包#

当你的虚拟环境处于激活状态时,你可以安装软件包。使用pip install命令来安装软件包。

安装软件包#

例如,让我们从Python 软件包索引 (PyPI)中安装Requests

python3 -m pip install requests
py -m pip install requests

pip 应该下载 requests 及其所有依赖项并安装它们

Collecting requests
  Using cached requests-2.18.4-py2.py3-none-any.whl
Collecting chardet<3.1.0,>=3.0.2 (from requests)
  Using cached chardet-3.0.4-py2.py3-none-any.whl
Collecting urllib3<1.23,>=1.21.1 (from requests)
  Using cached urllib3-1.22-py2.py3-none-any.whl
Collecting certifi>=2017.4.17 (from requests)
  Using cached certifi-2017.7.27.1-py2.py3-none-any.whl
Collecting idna<2.7,>=2.5 (from requests)
  Using cached idna-2.6-py2.py3-none-any.whl
Installing collected packages: chardet, urllib3, certifi, idna, requests
Successfully installed certifi-2017.7.27.1 chardet-3.0.4 idna-2.6 requests-2.18.4 urllib3-1.22

安装特定软件包版本#

pip 允许你使用版本说明符指定要安装的软件包版本。例如,要安装特定版本的requests

python3 -m pip install 'requests==2.18.4'
py -m pip install "requests==2.18.4"

要安装最新的2.x版本的 requests

python3 -m pip install 'requests>=2.0.0,<3.0.0'
py -m pip install "requests>=2.0.0,<3.0.0"

要安装软件包的预发布版本,请使用 --pre 标志

python3 -m pip install --pre requests
py -m pip install --pre requests

安装附加功能#

某些软件包具有可选的 附加功能。您可以通过在括号中指定附加功能来告知 pip 安装这些附加功能

python3 -m pip install 'requests[security]'
py -m pip install "requests[security]"

从源代码安装软件包#

pip 可以直接从其源代码安装软件包。例如,要安装 google-auth 目录中的源代码

cd google-auth
python3 -m pip install .
cd google-auth
py -m pip install .

此外,pip 可以从源代码中安装软件包 开发模式,这意味着对源代码目录的更改将立即影响已安装的软件包,而无需重新安装

python3 -m pip install --editable .
py -m pip install --editable .

从版本控制系统安装#

pip 可以直接从其版本控制系统安装软件包。例如,您可以直接从 git 存储库安装

google-auth @ git+https://github.com/GoogleCloudPlatform/google-auth-library-python.git

有关受支持版本控制系统和语法的更多信息,请参阅 pip 在 VCS 支持 上的文档。

从本地存档安装#

如果您有 分发软件包 存档(zip、wheel 或 tar 文件)的本地副本,则可以使用 pip 直接安装它

python3 -m pip install requests-2.18.4.tar.gz
py -m pip install requests-2.18.4.tar.gz

如果您有一个包含多个软件包存档的目录,您可以告知 pip 在那里查找软件包,而不是使用 Python 软件包索引 (PyPI)

python3 -m pip install --no-index --find-links=/local/dir/ requests
py -m pip install --no-index --find-links=/local/dir/ requests

如果您在连接受限的系统上安装软件包,或者您想严格控制分发软件包的来源,这将非常有用。

从其他软件包索引安装#

如果您想从 Python 软件包索引 (PyPI) 以外的索引下载软件包,可以使用 --index-url 标志

python3 -m pip install --index-url http://index.example.com/simple/ SomeProject
py -m pip install --index-url http://index.example.com/simple/ SomeProject

如果您想允许来自 Python 软件包索引 (PyPI)

python3 -m pip install --extra-index-url http://index.example.com/simple/ SomeProject
py -m pip install --extra-index-url http://index.example.com/simple/ SomeProject

升级包#

pip 可以使用 --upgrade 标志就地升级包。例如,要安装最新版本的 requests 及其所有依赖项

python3 -m pip install --upgrade requests
py -m pip install --upgrade requests

使用需求文件#

除了单独安装包,pip 还允许你在 需求文件 中声明所有依赖项。例如,你可以创建一个包含以下内容的 requirements.txt 文件

requests==2.18.4
google-auth==1.1.0

并使用 -r 标志告诉 pip 安装此文件中的所有包

python3 -m pip install -r requirements.txt
py -m pip install -r requirements.txt

冻结依赖项#

Pip 可以使用 freeze 命令导出所有已安装包及其版本的列表

python3 -m pip freeze
py -m pip freeze

它将输出一个包说明符列表,例如

cachetools==2.0.1
certifi==2017.7.27.1
chardet==3.0.4
google-auth==1.1.1
idna==2.6
pyasn1==0.3.6
pyasn1-modules==0.1.4
requests==2.18.4
rsa==3.4.2
six==1.11.0
urllib3==1.22

pip freeze 命令对于创建 需求文件很有用,这些文件可以重新创建环境中安装的所有包的确切版本。