使用 pip 和 venv 在虚拟环境中安装包#
本指南讨论如何使用标准库的虚拟环境工具 venv 创建和激活虚拟环境并安装包。本指南涵盖如何
创建和激活虚拟环境
准备 pip
使用
pip
命令将包安装到虚拟环境中使用和创建需求文件
注意
本指南适用于受支持的 Python 版本,目前为 3.8 及更高版本。
重要
本指南的前提是您使用的是从 <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
它。激活虚拟环境会将虚拟环境特定的python
和pip
可执行文件放入 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
命令对于创建 需求文件很有用,这些文件可以重新创建环境中安装的所有包的确切版本。