在一段时间内,Python 已经包含了对管理虚拟环境的支持。Python 3.3 甚至添加了内置的 venv 模块,用于创建不依赖第三方库的环境。Python 程序员使用几种不同的工具来管理他们的环境,我使用的一个工具叫做 virtualenvwrapper。
虚拟环境是一种将你的 Python 项目及其依赖项与系统安装的 Python 隔离开来的方法。如果你使用 macOS 或基于 Linux 的操作系统,它很可能自带一个 Python 版本作为安装的一部分,事实上,它很可能依赖于该特定版本的 Python 才能正常运行。但这是你的电脑,你可能想将其用于你自己的目的。你可能需要安装另一个版本的 Python,而不是操作系统提供的版本。你可能还需要安装一些额外的库。虽然可以升级你的系统 Python,但并不建议这样做。也可以安装其他库,但你必须小心,不要干扰系统依赖的任何东西。
虚拟环境是创建隔离的关键,你需要隔离才能安全地尝试不同版本的 Python 和不同的软件包组合。它们还允许你为不同的项目安装相同库的不同版本,这解决了如果所有项目的需求都安装在同一环境中将不可能解决的问题。
为什么选择 virtualenvwrapper 而不是其他工具?简而言之
- virtualenvwrapper 将所有环境保存在一个地方:默认情况下是
~/.virtualenvs
,而不是在你的项目目录内部或旁边放置venv
目录。 - 它提供了用于轻松创建和激活环境的命令,并且激活不依赖于找到正确的
activate
脚本。它只是workon 项目名称
(从任何地方),而不是source ~/Projects/flashylights-env/bin/activate
。
开始使用
首先,重要的是花时间了解你的系统 Python 是如何配置的,以及 pip 工具的工作原理。
以 Raspberry Pi OS 为例,该操作系统同时安装了 Python 2.7 和 3.7。它还为每个版本提供了单独的 pip 实例
- 命令
python
运行 Python 2.7,位于/usr/bin/python
。 - 命令
python3
运行 Python 3.7,位于/usr/bin/python3
。 - 命令
pip
为 Python 2.7 安装软件包,位于/usr/bin/pip
。 - 命令
pip3
为 Python 3.7 安装软件包,位于/usr/bin/pip3
。

(Ben Nuttall, CC BY-SA 4.0)
在开始使用虚拟环境之前,验证你自己的 python
和 pip
命令的状态非常有用。有关你的 pip
实例的更多信息,可以通过运行命令 pip debug
或 pip3 debug
找到。
我在运行 Ubuntu 的 Linux 计算机上的等效信息几乎相同(除了它是 Python 3.8);在我的 Macbook 上也非常相似,只是唯一的系统 Python 是 2.6,我使用 brew
安装了 Python 3.8,所以它位于 /usr/local/bin/python3
(以及 pip3
)。
安装 virtualenvwrapper
你需要使用你的系统 pip
为 Python 3 安装 virtualenvwrapper
sudo pip3 install virtualenvwrapper
下一步是配置你的 shell 以加载 virtualenvwrapper 命令。你可以通过编辑 shell 的 RC 文件(例如 .bashrc
、.bash_profile
或 .zshrc
)并添加以下行来完成此操作
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/bin/virtualenv
source /usr/local/bin/virtualenvwrapper.sh

(Ben Nuttall, CC BY-SA 4.0)
如果你的 Python 3 位于其他位置,请根据你的设置更改第一行。
关闭终端并重新打开以使其生效。第一次打开终端时,你应该看到来自 virtualenvwrapper 的一些输出。这只会发生一次,因为一些目录是在设置过程中创建的。
现在你应该能够输入命令 mkvirtualenv --version
以验证 virtualenvwrapper 是否已安装。
创建一个新的虚拟环境
假设你正在处理一个名为 flashylights 的项目。要创建具有此名称的虚拟环境,请运行命令
mkvirtualenv flashylights
环境已创建并激活,因此你将看到 (flashlylights)
出现在提示符之前

(Ben Nuttall, CC BY-SA 4.0)
现在环境已激活,情况发生了变化。python
现在指向与你之前在系统上识别的 Python 实例完全不同的 Python 实例。它为你的环境创建了一个目录,并将 Python 3 二进制文件、pip 命令以及更多内容放在其中。键入 which python
和 which pip
以查看它们的位置

(Ben Nuttall, CC BY-SA 4.0)
如果你现在运行 Python 程序,你可以使用 python
而不是 python3
运行它,并且你可以使用 pip
而不是 pip3
。你使用 pip
安装的任何软件包都将仅安装在此环境中,它们不会干扰你的其他项目、其他环境或你的系统安装。
要停用环境,请运行命令 deactivate
。要重新启用它,请运行 workon flashylights
。
你可以使用 workon
或 lsvirtualenv
列出所有可用的环境。你可以使用 rmvirtualenv flashylights
删除环境。
将虚拟环境添加到你的开发例程中是一件明智的事情。以我的经验来看,它可以防止我安装正在系统范围内试验的库,这可能会导致问题。我发现 virtualenvwrapper 是我进入该例程并轻松管理我的项目环境的最简单方法,而无需过多思考或记住太多命令。
高级功能
- 你可以在你的系统上安装多个 Python 版本(例如,使用 Ubuntu 上的 deadsnakes PPA),并使用该特定版本创建一个虚拟环境,例如,
mkvirtualenv -p /usr/bin/python3.9 myproject
。 - 你可以自动执行在进入/离开目录时激活/停用。
- 你可以使用
postmkvirtualenv
hook 在每次创建新环境时安装常用工具。
在文档中查看更多技巧。
本文基于 Ben Nuttall 在 virtualenvwrapper 上的 Tooling Tuesday post,并经许可重复使用。
评论已关闭。