在这个教程中,我们将学习关于Python虚拟环境,使用虚拟环境的好处,以及如何在虚拟环境中工作。
完成本教程后,您将了解以下内容:
如果您需要在Mac上安装Python,请参考教程在Mac上安装Python。
注意:本教程主要针对macOS和Linux用户;但是,Windows用户也应该能够跟着做。
Python虚拟环境由两个基本组件组成:虚拟环境运行的Python解释器和包含在虚拟环境中安装的第三方库的文件夹。这些虚拟环境与其他虚拟环境隔离开来,这意味着在虚拟环境中安装的依赖项的任何更改都不会影响其他虚拟环境或系统范围的库的依赖关系。因此,我们可以创建具有不同Python版本的多个虚拟环境,以及不同版本的库或相同库的不同版本。
上图说明了当我们创建多个 Python 虚拟环境时,系统上的内容。如上图所示,虚拟环境是一个文件夹树,其中包含特定的 Python 版本、第三方库和其他脚本;因此,系统上的虚拟环境数量没有限制,因为它们只是包含一些文件的文件夹。
当我们在同一台机器上有各种 Python 项目时,Python 虚拟环境的重要性就变得显而易见了,这些项目依赖于相同包的不同版本。例如,假设在两个使用 matplotlib 包的不同数据可视化项目上工作,一个使用 2.2 版,另一个使用 3.5 版。这将导致兼容性问题,因为 Python 不能同时使用同一包的多个版本。另一个放大了使用 Python 虚拟环境重要性的用例是,当您在托管服务器或生产环境中工作时,由于特定要求而无法修改系统范围的包。
Python 虚拟环境创建隔离的上下文,以将不同项目所需的依赖项分开,以便它们不会干扰其他项目或系统范围的包。基本上,设置虚拟环境是隔离不同 Python 项目的最佳方式,尤其是当这些项目具有不同且相互冲突的依赖项时。作为对新 Python 程序员的建议,始终为每个 Python 项目设置一个单独的虚拟环境,并在其中安装所有必需的依赖项——永远不要全局安装包。
到目前为止,我们已经了解了什么是虚拟环境以及为什么需要它们。在本教程的这一部分中,我们将学习如何创建、激活和(通常)使用虚拟环境。让我们开始吧!
首先创建一个项目文件夹,并在其中创建一个虚拟环境。为此,请打开终端应用程序,编写以下命令,然后按回车键。
$ mkdir alpha-prj
现在,使用 venv
命令在项目文件夹中创建一个虚拟环境,如下所示:
$ python3 -m venv alpha-prj/alpha-venv
注意有两种用于设置虚拟环境的工具,virtualenv
和 venv
,我们几乎可以互换使用它们。virtualenv
支持较旧的 Python
版本,需要使用 pip
命令进行安装。相比之下,venv
仅与 Python 3.3
或更高版本一起使用,并包含在 Python
标准库中,无需安装。
若要激活在上一步中创建的虚拟环境,请运行以下命令。
$ source alpha-prj/alpha-venv/bin/activate
正如您在激活虚拟环境后所看到的,其名称显示在终端提示符开头的括号中。运行 which python
命令是确保虚拟环境处于活动状态的另一种方法。如果我们运行此命令,它会显示 Python 解释器在虚拟环境中的位置。让我们检查一下虚拟环境中的位置。
(alpha-venv) $ which python
/Users/lotfinejad/alpha-prj/alpha-venv/bin/python
很高兴知道虚拟环境的 Python 版本与用于创建环境的 Python 版本相同。让我们检查一下虚拟环境中的 Python 版本。
(alpha-venv) $ python —version
Python 3.10.1
由于我使用 Python 3.10 来设置虚拟环境,因此虚拟环境使用完全相同的 Python 版本。
我们现在处于一个隔离的虚拟环境中,默认情况下只安装了 pip
和setup tools
。让我们通过运行 pip list
命令来检查虚拟环境中预安装的软件包。
(alpha-venv) $ pip list
Package Version
---------- -------
pip 21.2.4
setuptools 58.1.0
在我们想使用 pip
安装任何软件包之前,让我们将其升级到最新版本。由于我们在虚拟环境中工作,因此以下命令仅在此环境中升级 pip
工具,而不会在其他虚拟环境或系统范围内升级。
(alpha-venv) $ alpha-prj/alpha-venv/bin/python3 -m pip install --upgrade pip
让我们重新运行 pip list
命令以查看更改。
(alpha-venv) $ pip list
Package Version
---------- -------
pip 21.3.1
setuptools 58.1.0
很明显,pip
从 21.2.4
版本更新到 21.3.1
。现在,让我们将 pandas
包安装到环境中。在安装软件包之前,您需要确定要安装的版本。如果要安装最新版本,只需使用以下命令即可:
(alpha-venv) $ python3 -m pip install pandas
但是,如果要安装特定版本的软件包,则需要使用以下命令:
(alpha-venv) $ python3 -m pip install pandas==1.1.1
现在,让我们看看如何告诉 pip
我们将安装 1.2
版本之前的任何版本的 pandas
。
(alpha-venv) $ python3 -m pip install 'pandas<1.2'
此外,我们可以要求 pip
在 0.25.3
版本之后安装 pandas
包,如下所示:
(alpha-venv) $ python3 -m pip install 'pandas>0.25.3'
在前面的命令中,我们将包规范放在引号之间,因为大于 >
和小于 <
符号在命令行 shell
上具有特殊含义。这两个命令都将安装与给定约束匹配的最新版本的 pandas
包。但是,最佳做法是指定具有确切版本号的包。
让我们回顾一下环境中已安装的软件包列表。
(alpha-venv) $ pip list
Package Version
--------------- -------
numpy 1.22.0
pandas 1.3.5
pip 21.3.1
python-dateutil 2.8.2
pytz 2021.3
setuptools 58.1.0
six 1.16.0
安装 pandas
时,NumPy
和其他三个软件包将作为 pandas
软件包的先决条件自动安装。
重现虚拟环境是很常见的。假设你的同事将从事你已经工作了数周的同一个项目。她需要在系统上的虚拟环境中安装具有正确版本的完全相同的软件包。要创建相同的环境,您首先需要使用 pip freeze
命令列出项目虚拟环境中安装的所有依赖项。
(alpha-venv) $ pip freeze
numpy==1.22.0
pandas==1.3.5
python-dateutil==2.8.2
pytz==2021.3
six==1.16.0
pip freeze
的输出与 pip list
非常相似,但它以正确的格式返回环境中安装的软件包列表,以使用准确的软件包版本重现环境该项目需要。下一步是将包列表导出到 requirements.txt
文件中。为此,请运行以下命令:
(alpha-venv) $ pip freeze > requirements.txt
上面的命令在当前文件夹中创建一个名为 requirements.txt
的文本文件。 requirements.txt
文件包含所有软件包及其确切版本。我们来看看文件内容。
$ cat requirements.txt
numpy==1.21.5
pandas==1.3.5
python-dateutil==2.8.2
pytz==2021.3
six==1.16.0
干得好,您已经创建了一个 requirements.txt
,您可以将其分发给您的同事,以便在她的系统上重现相同的虚拟环境。现在,让我们看看她应该如何重现虚拟环境。这很简单。她首先需要创建一个虚拟环境并激活它,然后运行 ??pip install -r requirements.txt
命令来安装所有所需的软件包。
她将运行以下三个命令:
$ python3 -m venv prj/venv
$ source prj/venv/bin/activate
(venv) $ pip install -r requirements.txt
最后一个命令将在您的同事正在创建的虚拟环境中安装 requirements.txt
中列出的所有软件包。因此,如果她在她这边运行 pip freeze
命令,她会获得与您版本相同的软件包。另一个需要考虑的相关点是,如果要将项目添加到 Git
存储库,切勿将其虚拟环境文件夹添加到存储库。您唯一需要添加的是 requirements.txt
文件。
注意 Python 项目文件夹包含在虚拟环境中运行的源代码。另一方面,虚拟环境是一个包含 Python 解释器、包和工具(如 pip)的文件夹。因此,最佳实践是将它们分开,并且永远不要将项目文件放在虚拟环境文件夹中。
使用完虚拟环境后,或者想要切换到另一个虚拟环境时,可以通过运行以下命令来停用环境:
(alpha-venv) $ deactivate
如果要删除虚拟环境,只需删除其文件夹即可,无需卸载。
$ rm -rf alpha-prj/alpha-venv
在本节中,我们将逐步介绍如何在 VS Code
中使用 Python
虚拟环境。首先,确保您已创建并激活虚拟环境。现在导航到终端中的项目文件夹,然后运行以下命令:
(alpha-venv) alpha-prj $ code .
上面的命令将在 VS Code
中打开项目文件夹。如果上面的命令不起作用,请打开 VS code
,按 command + shift + P
,打开命令面板,输入 shell
命令并选择 在 PATH
中安装“code”命令。现在,创建一个 Python
文件,并将其命名为 my_script.py
。最后一步是使用 Python
选择虚拟环境:从命令面板中选择解释器命令。为此,请按 Command + shift + P
,然后键入 Python
,然后选择选择解释器。
Python:选择解释器命令显示所有可用环境。下图是我们需要选择的环境。
此时,如果您在 VS Code 中打开集成终端,您将看到虚拟环境处于活动状态,您可以在其中安装任何包。
在本教程中,我们学习了Python虚拟环境如何避免不同项目或系统范围内的依赖项之间的冲突。此外,我们还学习了如何通过在这些独立的环境之间切换来处理具有不同依赖关系的不同项目。
https://www.dataquest.io/blog/a-complete-guide-to-python-virtual-environments/