如何管理多个Python版本和虚拟环境

27次阅读

共计 3260 个字符,预计需要花费 9 分钟才能阅读完成。

  • 多个 Python 版本:在同一台机器上安装不同的 Python,例如 2.7 和 3.4。
  • 虚拟环境:独立的环境,既可以同时安装特定版本的 Python,也可以安装任何特定于项目的软件包,而不会影响任何其他项目。

在这里,我们将介绍使用这些工具的三种不同工具,以及何时需要每种工具。让我们探讨以下用例:

  • venv / pyvenv
  • pyenv
  • pyenv-virtualenv

如果您使用单个版本的 Python 如 3.3+ 版本,并且想要管理不同的虚拟环境,那么 venv 就是您所需要的。

如果你想使用多个 3.3+ 版本的 Python,不管是否有虚拟环境,那么请使用 pyenv。

如果您还想使用 Python 2,那么这 pyenv-virtualenv 是一个不错的选择。

VENV


Python 3.3+ 版本中包含 venv 包。它是创建轻量级虚拟环境的理想选择。

直到 Python 3.6,一个被调用的脚本 pyvenv 也作为包装器被包含在内 venv,但是这已被弃用。它将在 Python 3.8 中被完全删除。当使用 venv 时,可以使用完全相同的功能,并且应更新所有现有的文档。

venv 用于通过终端命令创建一个新的环境:

$ python3 -m venv directory-name-to-create

激活:

$ source name-given/bin/activate

通过以下方式停用:

$ deactivate

如果您在停用环境后需要完全删除环境,则可以运行:

$ rm -r name-given

默认情况下,它创建的环境是您当前正在使用的 Python 版本。如果您正在编写文档,并希望读者使用正确版本的 Python,则可以在命令中指定主要版本号和次要版本号,如下所示:

$ python3.6 -m venv example-three-six

如果阅读器使用 3.6 以外的版本,则该命令将不会成功,并将在其错误消息中指示。但是,任何补丁版本(例如 3.6.4)都可以使用。

当环境处于活动状态时,任何包都可以通过 pip 正常安装到它。默认情况下,新创建的环境 包含计算机上已安装的任何软件包。因为 pip 它本身不一定会安装在机器上。建议先使用,升级 pip 到最新版本 pip install –upgrade pip。

项目通常会有一个 requirements.txt 指定其依赖项的文件。这允许使用 shortcut 命令 pip install -r requirements.txt 命令将所有包快速安装到新创建的虚拟环境中。它们只存在于虚拟环境中。它在停用时将不可用,但在重新激活时将保持不变。

如果您不需要使用 Python 本身的其他版本,那么您只需要创建隔离的、特定于项目的虚拟环境。

pyenv


如果您希望在一台计算机上使用多个版本的 Python,那么 pyenv 是在版本之间安装和切换的常用工具。这不能与前面提到的贬值的 pyenv 脚本混淆。它不是与 Python 绑定的,必须单独安装。

pyenv 文档对它的工作原理进行了很好的描述,因此我们将在这里简单介绍如何使用它。首先,我们需要安装它。如果使用 Mac OS X,可以使用 Homebrew 执行此操作,或者考虑其他安装选项。

$ brew update
$ brew install pyenv

接下来,在 shell 脚本的底部添加以下内容,以允许 pyenv 自动更改版本:

eval "$(pyenv init -)"

打开您在使用外壳脚本,通过 $ ~/.zshrc,$ ~/.bashrc 或 $ ~/.bash_profile 复制并粘贴在上面的行。

运行 pyenv 版本将显示当前安装了哪些 Python 版本,在当前使用的版本旁边有一个 *。pyenv version 直接显示了这一点,python——version 可以用来验证这一点。

要安装一个附加版本,比如 3.4.0,只需使用 pyenv install 3.4.0。

pyenv 从四个方面来决定使用哪个版本的 Python,优先顺序如下:

  1. PYENV_VERSION 环境变量(如果指定)。您可以使用该 pyenv shell 命令在当前 shell 会话中设置此环境变量。
  2. 当前目录中的特定于应用程序的.python 版本文件(如果存在)。您可以使用 pyenv local 命令修改当前目录的.python 版本文件。
  3. 通过搜索每个父目录找到 (如果有的话) 第一个.python 版本的文件,直到找到文件系统的根目录。
  4. 全局版本文件。您可以使用 pyenv 全局命令修改这个文件。如果不存在全局版本文件,pyenv 假设您希望使用“system”Python。(换句话说,如果 pyenv 不在您的路径中,则运行哪个版本。)

当设置一个使用 Python 3.6.4 的新项目时,pyenv local 3.6.4 将运行在它的根目录中。这将设置版本,并创建一个.python-version 文件,以便其他贡献者的机器能够接收它。

pyenv 命令的完整描述可以添加书签。

pyenv 和 venv

使用 Python 3.3+ 时,我们现在知道如何在不同版本的 Python 之间安装和切换,以及如何创建新的虚拟环境。

举个例子,假设我们正在建立一个使用 Python 3.4 的项目。

首先,我们可以使用设置本地版本 pyenv local 3.4.0。

如果我们然后运行 python3 -m venv example-project 新的虚拟环境将 example-project 使用我们在本地启用的 Python 3.4.0 进行设置。

我们激活使用 source example-project/bin/activate 并可以开始工作。

接下来,我们可以选择记录协作者应该使用的内容 python3.4 -m venv <name>。这意味着即使协作者没有使用 pyenv 该 python3.4 命令,如果他们的 Python 版本不是我们想要的主要和次要版本(3 和 4),也会出错。

如果我们认为任何大于 3.4 的版本都是可以接受的,那么我们也可以选择使用 python3 而不是 python3.4,就像合作者使用 3.6 一样,否则他们也会收到一个错误。这是一个特定于项目的决策。

pyenv-virtualenv


pyenv 可用于安装 Python 2 和 3 版本。但是,正如我们所看到的,venv 仅限于大于 3.3 的 Python 版本。

pyenv-virtualenv 是一个创建与 pyenv 集成的虚拟环境的工具,适用于所有 Python 版本。如果可能,仍然建议使用官方的 Python venv。但是,例如,如果您正在创建一个基于 2.7.13 的虚拟环境,那么这是对 pyenv 的赞美。

如果您已经使用它,它也适用于 Anaconda 和 Miniconda conda 环境。virtualenv 还存在一个名为的工具。这里没有涉及,但它最后是联系在一起的。

安装 pyenv,接下来可以使用 Homebrew(或替代品)进行安装,如下所示:

$ brew install pyenv-virtualenv

接下来在你的 .zshrc,, .bashrc 或 .bash_profile(取决于你使用的 shell)在底部添加以下内容:

eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

这允许 pyenv 在移动目录时自动激活和停用环境。

要创建新的虚拟环境,请使用:

$ pyenv virtualenv <version> <name-to-give-it>
// for example
$ pyenv virtualenv 2.7.10 my-virtual-env-2.7.10

可以列出现有环境:

$ pyenv virtualenvs

激活 / 停用:

$ pyenv activate <name>
$ pyenv deactivate

在撰写本文时 activate,prompt changing will be removed from future release 将显示使用警告。这是预期的,仅指 (env-name) 在 shell 中显示的内容,而不是 activate 命令本身的使用。

安装要求的工作原理如下所述 venv。不像在 venv 一个 rm - r 命令不需要删除一个环境,一个 uninstall 命令存在。

正文完
 0