python: pythonbrew和virtualenv有什么区别?

38 投票
5 回答
6185 浏览
提问于 2025-04-17 06:59

我刚开始学习python,打算学习django。我之前有一点ruby的经验(不是rails),对RVM也有点了解,但我不太明白pythonbrewvirtualenv之间的区别。我知道pythonbrew是模仿RVM的,但我以为virtualenv已经在做RVM做的事情(或者反过来,pythonbrew已经在做RVM做的事情)。有人能解释一下,并提供一些具体的例子或用法来帮助我理解吗?非常感谢!

5 个回答

2

Python brew 是用来构建和安装的,可能有点像某种构建工具。我对这个不太熟悉。

而 Virtualenv 主要是用来创建独立的 Python 环境的,特别是当你有不同版本的 Python,或者你想尝试一些包而不影响系统上已有的版本时。


好的,这里揭示了一些内容

创建独立的 Python 环境(使用 virtualenv):

pythonbrew venv init
pythonbrew venv create proj
pythonbrew venv list
pythonbrew venv use proj
pythonbrew venv delete proj

来自 http://pypi.python.org/pypi/pythonbrew/

4

说实话,我之前从没听说过PythonBrew,但我知道(而且很喜欢)virtualenv。

Virtualenv是用来创建独立环境的,基于你电脑上安装的Python版本。也就是说,如果我有Python 2.7,我可以创建多个独立的Python 2.7环境,但我不能创建Python 2.6的环境。

根据我通过谷歌找到的这个链接,Pythonbrew似乎主要是用来安装其他版本的Python。所以我猜你可以用'brew来安装Python 2.6和2.7,然后用virtualenv为每个版本创建环境。

或者,看起来'brew也可以使用virtualenv来创建这些环境。

为什么不同的Python解释器并不算真正的独立环境。

每个Python安装都有一套包(我想是在'site-packages'文件夹里)。如果你安装了一个新包,它会被添加到这套包中,并且对你所有的Python代码都可用。

这可能会造成问题,比如你有一个项目是基于Django 0.96的,现在想开始一个新项目用Django 1.3。如果你直接更新系统中的Django版本,那会影响到你之前的项目。

使用virtualenv,你可以创建一个环境用Django 1.3,另一个环境用Django 0.96,两个环境都是Python 2.7。如果你愿意把旧项目放在Python 2.6上,新项目放在Python 2.7上也是可以的,但如果接下来的两个项目要用不同版本的Django,那该怎么办呢?

52

Pythonbrew就像Ruby的rvm,它是一个命令行工具,可以让你做以下几件事:

  • 在你的家目录下,构建一个或多个完整的、独立的Python版本。这样你可以有多个Python版本。
  • 轻松切换不同的Python版本。

你构建的Python版本彼此之间是完全隔离的,也和系统上安装的Python版本没有关系。

Virtualenv也有点类似,但不完全一样。它创建一个Python虚拟环境,概念上是建立在某个已有的Python安装之上(通常是系统的Python,但不一定)。在Unix系统(和Mac)上,它默认会创建指向各种Python库模块的符号链接,这样你实际上是在和“真实”的基础Python共享这些模块。不过,virtualenv有自己的“bin”目录和“site-packages”目录。你在这个虚拟环境中安装的额外内容,只能在这个环境里使用。

Pythonbrew的一个优点是它创建的Python环境是完全自给自足的。它们不会受到基础Python安装中出现的问题的影响,因为根本没有基础安装。这一点在virtualenv环境中就不成立了。如果你创建了一个virtualenv的Python环境,然后不小心搞坏了它所依赖的基础Python(比如,作为root用户时意外删除了基础Python的“site”目录的一部分),那么基于这个Python的任何virtualenv环境也会受到影响。

不过,virtualenv也有自己的优点。最大的优点可能是它比较轻量。因为Pythonbrew是从头编译Python,创建一个Pythonbrew环境需要一些时间。而创建一个virtualenv的Python环境则非常快。

实际上,你可以将它们一起使用。下面是一个你可能想这样做的情况:

  • 你的系统使用的是Python 2.6。
  • 你需要安装Python 2.7。
  • 出于某种原因,你不能(或者不想)在系统中与Python 2.6并行安装Python 2.7。

在这种情况下,你可以使用Pythonbrew在你的家目录下安装一个基础的Python 2.7,这样就不会和其他地方安装的东西冲突。然后,你可以基于Pythonbrew安装的2.7版本创建一个或多个轻量的virtualenv Python环境。例如,你可以用virtualenv快速创建短期的Python 2.7测试环境。

我怀疑大多数人其实并不会这样做。(我也不会。)但你完全可以这么做。

撰写回答