我是 python 新手,我打算学习 django。我对 ruby(不是 rails)有一点经验,而且我熟悉 RVM 但是我不明白 pythonbrew 之间的区别 和 virtualenv 。我知道 pythonbrew 模仿了 RVM但我认为 virtualenv 已经在做 RVM 所做的事情(反之亦然, pythonbrew 已经在做 RVM 所做的事情)。有人可以解释一下,也许可以提供一些具体的例子/用法来帮助我理解它。非常感谢!
最佳答案
Pythonbrew 类似于 Ruby 的 rvm:它是一个 shell 函数,允许您:
- 构建一个或多个完整的独立 Python 版本,每个版本都存储在本地 在您的主目录下。您可以通过这种方式构建多个 Python 版本。
- 在 Python 版本之间轻松切换。
您构建的 Python 彼此完全隔离,并且与系统范围内安装的任何 Python 版本无关。
Virtualenv 类似,但不完全相同。它创建了一个 Python 虚拟环境,从概念上讲,它位于一些现有 Python 安装(通常是系统范围的安装,但并非总是如此)之上。默认情况下,在 Unix 平台(和 Mac)上,它会创建指向各种 Python 库模块的符号链接(symbolic link),因此您实际上是在与“真正的”底层 Python 实现共享这些模块。但是,virtualenv 有自己的“bin”目录和“site-packages”目录。您在 Python 虚拟环境中安装的任何额外内容仅在该环境中可用。
Pythonbrew 的一个优势是它创建的 Python 环境是真正且完全独立的。它们不会被任何在底层基础 Python 安装中搞砸的东西所污染,因为没有底层基础安装。这不适用于 virtualenv 环境。如果你创建了一个 virtualenv Python,然后你以某种方式搞砸了它上面的基本 Python 实例(例如,在以 root 身份登录时意外删除了基本 Python 的“站点”目录的一部分),你将搞砸任何基于 virtualenv 的环境也在那个 Python 上。
不过,virtualenv 也有自己的优势。可能最大的优点是它是轻量级的。由于 Pythonbrew 从头开始编译 Python,因此要创建其环境之一,创建 Pythonbrew Python 环境需要一些时间。相比之下,创建 virtualenv Python 环境确实很快。
事实上,您可以将它们一起使用。这是您可能想要这样做的一种情况。
- 您的基本系统使用 Python 2.6。
- 您需要安装 Python 2.7。
- 无论出于何种原因,您都不能(或不想)在系统范围内安装 Python 2.7, 与 Python 2.6 并行。
在这种情况下,您可以使用 Pythonbrew 在您的主目录下安装基础 Python 2.7,它不会与安装在其他位置的任何内容发生冲突。然后,您可以创建一个或多个基于 Pythonbrew 安装的 2.7 Python 的轻量级 virtualenv Python 环境。例如,您可以使用 virtualenv 为 Python 2.7 启动短期测试环境。
我怀疑大多数人是否真的这样做。 (我不知道。)但没有理由你不能。
关于python:pythonbrew 和 virtualenv 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8256723/