我是python的新手,我打算学习django。我对ruby(而不是rails)有一些经验,我熟悉 RVM 但是我不明白 pythonbrew 之间的区别和 virtualenv 。我知道 pythonbrew 是RVM的模仿,但我认为 virtualenv 已经在做RVM所做的事情(反之亦然< strong> pythonbrew 已经在做RVM的工作了。有人可以解释一下,或许可以提供一些具体的例子/用法来帮助我理解它。非常感谢!
答案 0 :(得分:51)
Pythonbrew类似于Ruby的 rvm :它是一个shell函数,允许您:
你构建的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环境非常快。
事实上,你可以一起使用它们。这是您可能想要这样做的一种情况。在这种情况下,您可以使用Pythonbrew在您的主目录下安装基本Python 2.7 ,它不会与其他地方安装的任何内容冲突。然后,您可以创建一个或多个基于Pythonbrew安装的2.7 Python的轻量级virtualenv Python环境。例如,您可以使用virtualenv以这种方式为Python 2.7启用短期测试环境。
我怀疑大多数人实际上是这样做的。 (我没有。)但是没有理由你不能。
答案 1 :(得分:4)
我之前从未听说过PythonBrew的价值,但我知道(和爱)virtualenv。
Virtualenv用于在您的计算机上安装的python上创建单独的环境 based 。也就是说,如果我有python 2.7,我可以创建一些隔离的python 2.7环境,但是我无法创建python2.6环境。
根据this(我通过谷歌发现),Pythonbrew似乎专注于安装其他python版本。所以我想你会用'brew来安装py2.6和2.7然后使用virtualenv来为每个人创建环境。
或者,似乎'brew也可以使用virtualenv创建环境。
为什么不同的python解释器实际上不是一个孤立的环境。
每个python安装都有一组包(我认为放在'site-packages'中)。如果您安装了一个新包,它将被添加到该集合中,并且可用于您的所有python代码。
如果您在Django0.96上构建了一个项目并且想要使用Django1.3启动一个新项目,那么这可能是个问题。如果您只是更新Django的系统版本,那也会影响您的旧项目。
使用virtualenvs,您可以使用Django1.3创建一个环境,使用Django0.96创建另一个环境,两者都是python2.7。如果您可以在python2.6中运行旧项目,在python2.7中运行新项目,那么您也可以这样做,但是接下来的两个项目使用Django-Trunk的diffenret版本呢?
答案 2 :(得分:2)
Python brew用于构建和安装,可能就像一些buildbot。我不太熟悉。 Virtualenv主要用于,当你有不同版本的python,或者你想尝试一些包而不会打扰系统版本。
好的,这会让人感到高兴
创建隔离的python环境(使用 virtualenv ):
pythonbrew venv init
pythonbrew venv create proj
pythonbrew venv list
pythonbrew venv use proj
pythonbrew venv delete proj
答案 3 :(得分:1)
由于上述所有答案都很陈旧,我想在此总结一下我的发现。来自rvm / ruby之后,我试图弄清楚它是如何与Python一起工作的,并且无法在网上找到明确的解释。
因此我们在Macos上有以下选项:
...可以安装python
和python3
。它们将存储在Homebrew的Cellar中,并与/usr/local/bin
进行符号链接。截至目前,使用python
安装的默认brew
为2.7.6。
使用pip
安装的软件包将进入默认位置(您还有pip
和pip3
符号链接。)
...可以替代Homebrew(在Macos上)安装和维护多个版本的Python。 Linux没有Homebrew,所以Pyenv只是Python的专用版本。它还从源代码构建Python。
Pyenv将python安装保存在~/.pyenv/versions/
中,允许快速切换并使用二进制文件的相同名称(python
,pip
等)。它使用“shim”二进制文件,它们是假的二进制文件,如python
,pip
等,它们模仿Python,而只是默默地将执行重定向到当前活动的版本。
使用pip
安装的软件包将进入活动的Python安装。
因此,这些方法都不足以维持每个项目单独的python安装和包版本集(如rvm对gemsets一样)。因此:
...是最接近rvm的东西。引用this post:
它通过复制或链接主Python安装中的文件来创建新的bin和lib目录,从而在新目录中设置Python的干净副本
因此它使用当前活动的Python 副本并将其复制到一个单独的目录中。 virtualenvwrapper
添加了管理这些环境的功能,并使用cd
自动激活它们,就像rvm
一样。
这允许隔离为每个项目安装的python版本和库。但是,它本身不会安装python
版本。
因此,听起来像大多数人使用pyenv
+ virtualenv
或brew
+ virtualenv
的组合(brew当然是具体的Macos)。第一部分用于安装python版本(如果需要),第二部分用于克隆不同项目并在它们之间切换。
PS:我刚刚开始弄明白,如果有任何错误,请纠正我。
PPS:在我看来,通过将pyenv和virtualenv结合在一起,可以改善整个业务......答案 4 :(得分:0)
"pythonbrew is a program to automate the building and installation
of Python in the users $HOME."
相比之下,virtualenv为开发项目提供了一个隔离的环境 - 它将该项目的所有库保存在一个地方,这使得重新定位(以及部署)项目变得更加容易。