python:pythonbrew和virtualenv有什么区别?

Jef*_*eff 38 ruby python virtualenv rvm pythonbrew

我是python的新手,我打算学习django.我有一些ruby(而不是rails)的经验,我熟悉RVM但是我不明白pythonbrewvirtualenv之间的区别.我知道pythonbrewRVM的模仿,但我认为virtualenv已经在做RVM所做的事情(反之亦然,pythonbrew已经在做RVM的工作).有人可以解释一下,或许可以提供一些具体的例子/用法来帮助我理解它.非常感谢!

Bri*_*per 51

Pythonbrew类似于Ruby的rvm:它是一个shell函数,允许您:

  • 构建一个或多个完整的自包含Python版本,每个版本都存储在您的主目录下.您可以通过这种方式构建多个版本的Python.
  • 轻松切换Python版本.

您构建的Pythons彼此完全隔离,并且从系统范围内安装的Python版本完全隔离.

Virtualenv类似,但不完全相同.它创建了一个Python虚拟环境,从概念上讲,它位于一些现有的Python安装之上(通常是系统范围的安装,但并非总是如此).默认情况下,在Unix平台(和Mac)上,它会创建指向各种Python库模块的符号链接,因此您可以使用"真正的"底层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.6系统范围内安装Python 2.7.

在这种情况下,您可以使用Pythonbrew 在您的主目录下安装基本Python 2.7 ,它不会与其他地方安装的任何内容冲突.然后,您可以创建一个或多个基于Pythonbrew安装的2.7 Python的轻量级virtualenv Python环境.例如,您可以使用virtualenv以这种方式为Python 2.7启动短期测试环境.

我怀疑大多数人实际上是这样做的.(我没有.)但是没有理由你不能.

  • 同意一切,但对你的上一句话感到好奇.我一直在使用Pythonbrew和virtualenv.这似乎是让我的开发和生产环境保持同步的唯一理智方式. (2认同)