发布于 2026-01-05 6 阅读
0

用于管理虚拟环境的 Python 工具

用于管理虚拟环境的 Python 工具

Python 虚拟环境是“一个独立的目录树,其中包含特定版本的 Python 安装以及一些额外的软件包”(引自官方文档)。

接下来是必备的xkcd漫画:

XKCD 漫画:Python 虚拟环境混乱

这个故事告诉我们:在使用 Python 虚拟环境时要有意识、有条理,尽量不要污染系统 Python 环境,否则会变得一团糟。

由于虚拟环境可能造成混乱,因此涌现出了许多工具来帮助管理这些环境。本文将介绍并演示其中的几种。



如何使用本指南

本指南旨在解答各种问题,面向各种受众,反映了我内心深处的各种声音。

  • 虚拟环境在实际应用中是如何运作的?请参阅概要venv
  • 如何使用我选择的工具来管理虚拟环境?阅读完相关内容后,请在目录venv中找到您的工具,查看简要介绍。(或者在评论中推荐我遗漏的工具!)
  • 有哪些工具可用于管理虚拟环境?请阅读全文!建议先浏览目录。欢迎在评论区提出批评和建议。
  • 哪种工具最适合我?可能是virtualenvPoetry,或者Conda。我最后才会做出这样的判断。

使用venvPython 中包含的

附注:该virtualenv命令是本节所述原生命令的“超集” python -m venv。实际上,如果您想要获得更快的速度和更多功能virtualenv,只需将以下内容中virtualenv出现的任何内容替换为原生命令即可。请参阅下方的 virtualenv 使用和安装说明python -m venv

幸运的是,venv两个模块pip通常都包含在你的 Python 安装包中。要在目录中创建虚拟环境.venv,请尝试以下操作:



python -m venv .venv


Enter fullscreen mode Exit fullscreen mode

为了更详细地解释一下:使用与你想要在虚拟环境中使用的 Python 版本对应的 Python 可执行文件。它可以python像上面那样命名为 `python`,也可以是 ` python`、 python3`python` python3.8、`python`python3.9甚至是pypy3`python`;你应该明白我的意思。然后告诉它执行venv模块,后面跟着你希望虚拟环境所在的目录名称。如上所示,我通常使用 `python`.venv或为了更清晰地显示,使用 `python` venv

应该会有一个短暂的停顿,然后会创建一个名为 `<directory_name>` 的新目录,您可以使用 `<directory_name>`或 ` <directory_name>`.venv查看该目录(在 Mac 和 Linux 系统上,由于前缀的存在,该目录将不可见,除非您使用`<directory_name> `)。您可以使用任何您喜欢的目录名称来代替 `<directory_name>`lsdir.ls -a.venv

如果您看到的是类似“由于 ensurepip 不可用,虚拟环境创建失败”或其他发行版特有的错误信息,请按照给出的说明进行操作,或阅读如何安装pipensurepipvenv

激活虚拟环境

现在您可以激活虚拟环境了。



source ./venv/bin/activate


Enter fullscreen mode Exit fullscreen mode

或者,在 Windows 系统上:



.\venv\Scripts\Activate.ps1


Enter fullscreen mode Exit fullscreen mode

如果不使用 Bash 或 Powershell,您可以查看./venv/bin.\venv\Scripts目录,了解 CMD、fish 或 csh 的其他选项。

激活后,命令提示符应更改为以虚拟环境目录名称为前缀。例如:



(.venv) [default command prompt] $


Enter fullscreen mode Exit fullscreen mode

(.venv)(或者你给它起的任何名字)就是你已激活虚拟环境的标志。重启机器或打开其他 shell 或终端标签页后,它不会保持激活状态。请养成运行激活脚本的习惯

编辑器/IDE有时会提供管理甚至自动激活虚拟环境的方法。例如, VSCode有相关说明AtomVimSublime以及PyCharm也有相应的插件。

激活后,您应该可以尝试类似这样的操作:



(.venv) $ python
>>> import sys
>>> sys.executable
'/home/my_username/sample_python/.venv/bin/python'
>>>


Enter fullscreen mode Exit fullscreen mode

你看,可执行文件是不是在你的虚拟环境目录里?如果虚拟环境没有激活,它sys.executable应该显示类似这样的内容'/usr/bin/python',或者显示类似'C:\\Python38\\python.exe'这样的内容。

在虚拟环境中执行 Python 脚本

您可以通过两种方式执行 Python 脚本:

  • 激活虚拟环境,然后运行python my_script_name.py
  • 即使不激活,也可以使用虚拟环境中的 Python 运行脚本,例如:./.venv/bin/python my_script_name.py

停用虚拟环境

要退出虚拟环境,请将其停用,如下所示:



(.venv) $ deactivate
$


Enter fullscreen mode Exit fullscreen mode

很简单。要重新激活,请重复上述步骤。

安装东西

重新激活虚拟环境,并使用 pip 安装一些程序:



(.venv) $ pip install arrow


Enter fullscreen mode Exit fullscreen mode

需要先安装软件包及其依赖项,然后才能导入和使用该软件包。

您可以注销,暂时不用管 Python,几周后再回来重新激活您的虚拟环境。软件包仍然会安装,但仅限于此虚拟环境,不会影响您的系统 Python 环境或其他虚拟环境。

摧毁虚拟环境

“我的虚拟环境已经无法修复了,”你说?这种情况时有发生。这就是使用虚拟环境的风险所在。该怎么办呢?

把它烧掉。



rm -r .venv


Enter fullscreen mode Exit fullscreen mode

全部都拿走了。希望你还记得包裹清单(你之前pip freeze是不是pip list先执行了某个操作才得到清单的?)

然后按照上述说明重新创建虚拟环境

virtualenv

virtualenv工具与 非常相似python -m venv。事实上,Python 的venv模块就是基于virtualenv 的。然而,使用virtualenv代替python -m venv有一些显而易见的优势:

  • virtualenv通常比python -m venv
  • pip像 `sys.py` 、setuptools`sys.py` 和 `sys.py`这样的工具wheel通常更新更及时,并且会缓存数据(因此性能有所提升)。从virtualenv某种意义上说,这些是种子包。当然,你也可以添加其他种子包。

virtualenv用法

一些不错的virtualenv命令:

  • virtualenv --help最后,它会告诉你配置文件应该放在哪里,以防你想设置一个通用配置。
  • virtualenv --upgrade-embed-wheels将会把所有种子包(如pip、 等)更新到最新版本。

否则,请按照上述说明进行操作venv,但使用virtualenv代替python -m venv

virtualenv安装

您或许可以virtualenv从软件包管理器的存储库中安装(例如,使用apt或)。dnf

但我强烈推荐使用pipxpipx。您可以阅读我关于 pipx 的文章“如何安装 Python 命令行工具或脚本? ”,其中包含解释和说明。

安装完成后pipx,您应该能够:



pipx install virtualenv


Enter fullscreen mode Exit fullscreen mode

诗

virtualenv它们既实用又简单,而且venv各方面功能都很出色。Poetry是另一个便捷的工具,不仅可以用于管理虚拟环境,还可以用于项目和依赖关系管理。

欢迎阅读我的 Poetry 项目管理入门指南,以便开始使用该工具。

与Pipenv一样,Python 文档几乎是官方推荐 Poetry。在“管理应用程序依赖项”教程(本身就是 Pipenv 的使用指南)中写道,我们“也应该考虑使用Poetry项目作为替代的依赖项管理解决方案”。

有了如此高的评价,让我们来尝试一下诗歌吧。

诗歌装置

您可以按照我的 Poetry 入门教程官方文档来安装 Poetry。

决定诗歌将虚拟环境放置在哪里

默认情况下,Poetry 会将虚拟环境集中安装到一个位置。如果您不希望项目目录中充斥着虚拟环境目录(换句话说,如果您不希望在项目中看到 `<virtual-environment-name>`venv或 `<virtual-environment-name> ` 目录),那么这种方式非常方便。.venv

如果你和我一样更倾向于传统方式,希望将虚拟环境文件放在.venv每个项目的单独目录中,可以试试这个方法:



poetry config virtualenvs.in-project true


Enter fullscreen mode Exit fullscreen mode

这将使诗歌在全球范围内实现这一目标。

与诗歌虚拟环境互动

诗歌是为项目管理而生的,所以要创建一个新的虚拟环境,首先要创建项目目录并进入该目录:



poetry new my_project
cd my_project


Enter fullscreen mode Exit fullscreen mode

首次需要虚拟环境时,系统会自动创建。

激活虚拟环境:



poetry shell


Enter fullscreen mode Exit fullscreen mode

要退出此虚拟环境,请使用 `quit` 命令退出exitCtrl-d或者使用您喜欢的任何方式退出 shell。

无需先进入虚拟环境,即可使用该命令执行环境中可用的任何命令poetry run。例如:



poetry run python


Enter fullscreen mode Exit fullscreen mode

应该会在虚拟环境中显示 Python 提示符。

添加包含诗歌的软件包

与传统方法不同,使用 Poetry 时,我们不应该使用 `.`pip install来安装软件包。而应该使用 ` poetry add.`



poetry add arrow


Enter fullscreen mode Exit fullscreen mode

上述操作将安装 arrow 并将其记录为pyproject.toml文件中的依赖项。

你可能会看到各种各样的其他诗歌命令poetry help

Pipenv

Pipenv

有趣的是,官方的Python“安装软件包”教程明确指出“直接管理多个虚拟环境可能会变得很繁琐,所以……”,然后提到了Pipenv

尽管有这种近乎官方的推荐,但我仍然使用Poetry,virtualenv因为它稳定且简单,因为它提供了出色的项目和依赖项管理。

话虽如此,Pipenv 已经流行了一段时间,值得关注和尊重。如果你喜欢它,那也是有充分理由的。

安装 Pipenv

虽然Pipenv 文档建议使用 pip 或其他包管理器,但我强烈建议使用pippipx来安装 Pipenv。您可以在这里阅读更多关于安装和使用的信息pipx。然后……



pipx install pipenv


Enter fullscreen mode Exit fullscreen mode

与 Pipenv 的虚拟环境进行交互

使用 Pipenv 时,首先创建项目目录非常重要。(实际上,使用任何工具时,这都是一个好习惯。)

首次需要虚拟环境时,系统会自动创建。

激活虚拟环境:



pipenv shell


Enter fullscreen mode Exit fullscreen mode

要退出此虚拟环境,请使用 `quit` 命令退出exitCtrl-d或者使用您喜欢的任何方式退出 shell(如果您尝试过上面的Poetry命令,这一切应该会感觉有点熟悉)。

无需先进入虚拟环境,即可使用该命令执行环境中可用的任何命令pipenv run。例如:



pipenv run python


Enter fullscreen mode Exit fullscreen mode

应该会在虚拟环境中显示 Python 提示符。

使用 Pipenv 安装软件包

pip installPipenv不使用 . 来安装软件包,而是使用pipenv install.



pipenv install arrow


Enter fullscreen mode Exit fullscreen mode

上述操作将在Pipfile当前目录中安装 arrow 并将其记录为依赖项。

你可能会看到各种各样的其他诗歌命令pipenv -h

Pyflow

我承认我喜欢崭新闪亮的东西。在这方面,我有点像个喜鹊。

喜鹊图片

如果你问我有什么推荐的工具可以轻松创建虚拟环境,我会询问你的项目和需求,然后通常会建议virtualenvPoetry

但如果你想尝试一些略显冷门但很有前途的东西,尤其是在处理不同 Python 版本的情况下,那么Pyflow应该会很有趣。你可以把它想象成 Poetry 的简化版,加上简洁的 Python 版本管理,借鉴conda 的理念,然后用Rust编写整个程序,它看起来就有点像 Pyflow 了。Pyflow 能否成熟并获得社区的认可,还有待时间检验;就目前而言,我偶尔会试用一下,感觉很不错。

安装 Pyflow

要安装 Pyflow,请访问Pyflow 发布页面,下载并安装适合您平台的软件包。更多详情请参阅Pyflow 的安装说明。

与 Pyflow 的虚拟环境交互

要使用 Pyflow 创建一个新的虚拟环境,首先需要创建项目:



pyflow new my_project


Enter fullscreen mode Exit fullscreen mode

Pyflow 的一个独特之处在于:它会提示你输入 Python 版本。此外,如果你指定的版本尚未安装,它会自动为你安装,而且速度相当快(不像pyenv那样从头开始编译)。

然后将这个新目录设为当前工作目录。



cd my_project


Enter fullscreen mode Exit fullscreen mode

首次需要虚拟环境时,系统会自动创建。

在虚拟环境中启动 Python:



pyflow python


Enter fullscreen mode Exit fullscreen mode

实际上,您可以使用 `.` 来执行环境中任何可用的命令pyflowcommand。这是 `.` 的缩写pyflow runcommand

据我所知,Pyflow 并没有专门的方法来激活虚拟环境。你可以像这样深入查看已安装的虚拟环境:



.\__pypackages__\3.8\.venv\Scripts\Activate.ps1


Enter fullscreen mode Exit fullscreen mode

这是 Windows PowerShell。对于 Mac 或 Linux:



source ./__pypackages__/3.8/.venv/bin/activate


Enter fullscreen mode Exit fullscreen mode

然而,我感觉这并非 Pyflow 的预期用法。相反,应该使用 `pip install` 或 `pip install` 来运行所有pyflowcommand命令pyflow python

使用 Pyflow 安装软件包

与其他许多工具一样,使用 Pyflow 时,您无需手动pip install安装软件包。相反,pyflow install它会在虚拟环境中安装软件包,并将其添加到pyproject.toml.



pyflow install arrow


Enter fullscreen mode Exit fullscreen mode

这将安装 arrow 软件包。

你可能会看到各种各样的其他 Pyflow 命令pyflow help

pyenv-virtualenv

如果您想用它virtualenv来管理虚拟环境并处理多个 Python 版本,pyenv-virtualenv那么它可能很适合您。

关于 Python 版本管理工具的建议pyenv-virtualenvpyenv除非你确定自己确实需要,否则不要使用Python 版本管理工具(或其他任何 Python 版本管理工具)。Python 版本管理工具并非用于管理虚拟环境,而是管理多个 Python 版本。但是,即使你安装了多个 Python 版本,也pyenv可能不需要Python 版本管理工具。在我的 Fedora 系统上,我只使用Python 版本控制工具,例如 `python` 、`python3` 等,效果就很好。在 Windows 系统上,`python3` 和 `python3`也都运行良好。换句话说,在假设 Python 版本管理工具可以解决你尚未解决的问题之前,请仔细审视你的需求和使用习惯。当然,如果你需要,它就在那里。但如果你暂时不需要,可以先把它添加到书签,以后再用,然后继续愉快地编写代码。pyenvpython3.6python3.9py -3.8py -3.7pyenv

pyenv-virtualenv 关于Pyflow的一些建议pyenv-virtualenv如果你需要 Python 版本和虚拟环境管理的组合, Pyflow比 Conda 更年轻、更时尚,速度也更快。不过,它的实战经验可能不如Conda丰富。Conda是另一个内置 Python 版本管理功能的选项。

pyenv-virtualenv 安装

pyenv-virtualenv是 的插件pyenv,所以这是先决条件。

安装方法:pyenv请按照官方说明操作,或直接使用自动安装程序。自动安装程序仅提供安装步骤。curl https://pyenv.run | bash

pyenv在 Windows 系统上无法运行。虽然有一个 Windows 版本的pyenvpyenv,但它似乎与等插件不兼容pyenv-virtualenv

如果您没有使用自动安装程序,请按照pyvenv-virtualenvpyenv-virtualenv的官方说明手动安装插件。不过,这里有个小提示:git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv

与虚拟环境进行交互pyenv-virtualenv

要创建一个新的虚拟环境pyenv-virtualenv,请尝试以下操作:



pyenv virtualenv 3.8.5 venv38


Enter fullscreen mode Exit fullscreen mode

这将在当前目录下创建一个虚拟环境。该环境中的 Python 版本为 3.8.5,虚拟环境的别名为“venv38”。

如果您不确定可以pyenv使用哪些 Python 版本,请尝试以下方法。



pyenv versions


Enter fullscreen mode Exit fullscreen mode

和/或



pyenv install --list


Enter fullscreen mode Exit fullscreen mode

查看有哪些版本可供选择,以便您可以选择pyenv install其中一个。

成功创建虚拟环境后,它应该会出现在列表中:



pyenv virtualenvs



Enter fullscreen mode Exit fullscreen mode

每个虚拟环境都有两个条目,一个长条目和一个短别名。

要手动激活虚拟环境,可以使用短别名:



pyenv activate venv38


Enter fullscreen mode Exit fullscreen mode

停用方法:



pyenv deactivate


Enter fullscreen mode Exit fullscreen mode

请注意,它提供了一个可选功能,当您进入包含有效虚拟环境名称文件的目录pyenv-virtualenv时,该功能会自动激活虚拟环境。根据您的使用习惯,这可能非常方便,也可能非常烦人。请参阅安装说明,为您的 shell 启用此功能。如果您使用了自动安装程序并按照其说明操作,则此功能可能已启用。cd.python-version

进入已激活的虚拟环境后,您可以按照上述pip说明安装软件包venv

您可以使用pyenv help和找到一些命令行帮助pyenv help virtualenv

康达

康达

Conda不仅仅是另一个 Python 包管理器或环境管理器;它是一个独立的 Python 生态系统。Conda的包仓库与大多数包/项目管理器使用的PyPI 仓库不同。Conda 仓库包含约 1500 个软件包,而 PyPI 仓库则包含约 15 万个软件包。也就是说,如果需要,Conda 也可以与 pip 一起使用。

安装 Conda

如果你想要一个功能齐全、包罗万象的 Python 和所有科学工具的安装包,可以看看Anaconda。不过,它和本文中提到的其他工具相比,就显得不太合适了。Miniconda 更适合你。Miniconda 提供命令行工具以及入门所需的全部依赖项。这通常就足够了。如果你不确定 Anaconda 和Minicondaconda哪个更适合你,可以参考一下相关的对比评测

要安装 Miniconda,请找到适用于您的安装程序,下载并安装。您的软件包管理器(例如 apt aptdnfapt、brewapt 等)可能也已包含 Conda。

在我的一个 Linux 系统上,我还需要先配置 Conda 以使用我的 shell。由于我使用的是 Bash,所以我这样做了:



conda init bash
conda config --set auto_activate_base false


Enter fullscreen mode Exit fullscreen mode

第一条命令会给你的.bashrc文件添加一些功能,包括自动激活“基础”Conda环境。我并非总是需要Conda,所以这个功能对我来说不太合适。因此我添加了第二条命令,它会~/.condarc在你的用户目录下创建一个包含该设置的文件。

与 Conda 虚拟环境交互

要创建一个新的虚拟环境,请指定要使用的虚拟环境的名称(可以是任何名称),还可以(但建议)指定 Python 版本:



conda create --name env38 python=3.8.5


Enter fullscreen mode Exit fullscreen mode

创建完成后,您可以使用以下命令激活虚拟环境:



conda activate env38


Enter fullscreen mode Exit fullscreen mode

请务必指定您之前选择的虚拟环境名称。

要停用虚拟环境



conda deactivate


Enter fullscreen mode Exit fullscreen mode

无论使用哪个 shell 或平台, ` conda activateand`conda deactivate命令都能正常工作。真棒!

使用 Conda 安装软件包

要使用 Conda 安装软件包,请使用conda install,并确保已使用 激活虚拟环境conda activate



conda install arrow


Enter fullscreen mode Exit fullscreen mode

上述命令会安装“arrow”软件包。Conda 的一个优点是:它会准确地告诉你它将在哪里执行什么操作。因此,你可以确切地知道它是在虚拟环境(以及是哪个虚拟环境)内安装软件包,还是在系统范围内安装。Conda 非常健谈,我喜欢这一点。

孵化

Hatch有点像Pyflow,它很时髦(pyproject.toml例如,它会使用一些比较冷门的工具),功能也很多。就我所见,它绝对是预填充测试用例最强大的工具。

安装 Hatch

我建议使用pipxpipx 来安装 Hatch。您可以阅读我关于 pipx 的文章“如何安装 Python 命令行工具或脚本? ”,了解相关解释和说明。



pipx install hatch


Enter fullscreen mode Exit fullscreen mode

与Hatch的虚拟环境进行交互

要使用 Hatch 创建新的虚拟环境,首先要创建项目:



hatch new my_project


Enter fullscreen mode Exit fullscreen mode

注意:Hatch 可以使用Conda来管理 Python 版本。实际上,hatch conda它会将 miniconda 安装到您选择的位置。如果您已通过这种方式安装了 miniconda,则可以使用类似这样的命令hatch new -py 3.8.5 my_project来指定 Python 版本。

hatch new自动创建虚拟环境。您可以将该新目录设置为当前工作目录。



cd my_project


Enter fullscreen mode Exit fullscreen mode

然后使用hatch shell该命令进入虚拟环境。你应该能够从新的 shell 中启动 Python 等程序。

要退出此虚拟环境,请使用 `quit` 命令退出exitCtrl-d或者使用您喜欢的任何方式退出 shell。

使用 Hatch 安装软件包

与其他许多工具一样,Hatch 并不直接用于pip install安装软件包。相反,hatch install它会在虚拟环境中安装软件包。



hatch install arrow


Enter fullscreen mode Exit fullscreen mode

这将安装“arrow”软件包。

未经请求的抱怨:我承认,让我感到非常困惑的是,目前 Hatch 似乎没有更新任何可能的源包:pyproject.tomlsetup.pyrequirements.txt。我怀疑这是有意为之:用户必须主动手动将这些包添加到正确的位置。至于哪个位置才是正确的,我想,这取决于您自己。

您可能会看到其他各种带有句点的 Hatch 命令hatch -h

选择哪种工具?

选择工具其实是一个主观问题。你是谁?你用 Python 做什么?你的需求/愿望是什么?

关于工具选择的建议(未经请求):使用诗歌

以下是一些更为细致的观点,其中一些观点颇具见地且公正。

  • 您是否正在构建一个软件包/项目,并想要一个功能强大的工具,能够帮您处理很多事情,并且在 Python 社区中越来越受欢迎?Poetry
  • 你是极简主义者/传统主义者/老顽固,并且以此为傲吗?venvvirtualenv如果你不介意多用一个工具的话)
  • 你是不是在编写一个简单的、可能只存在一段时间的、一次性的脚本?venv除非你已经virtualenv安装了
  • 您是否需要管理多个不同的 Python 版本,并且所需的软件包都在Conda 仓库中?Conda
  • 您是否想要管理多个不同的 Python 版本,并且不想(仅仅)使用 Conda?pyenv-virtualenv
  • 你想管理多个不同的 Python 版本,并且你是一位勇于尝试、敢于冒险的早期使用者吗?Pyflow或许适合你。
  • 你是数据科学家吗?不妨考虑一下Conda。
  • 你已经在使用______并且很喜欢它吗?那就用它。
  • 你试过______但不喜欢吗?那就试试其他的吧。

其他相关文章

文章来源:https://dev.to/bowmanjd/python-tools-for-managing-virtual-environments-3bko