Python 安装pip和virtualenv,一个鸡和蛋的两难选择?

Python 安装pip和virtualenv,一个鸡和蛋的两难选择?,python,installation,virtualenv,pip,Python,Installation,Virtualenv,Pip,我已经在使用pip和virtualenv(实际上,有时我仍然更喜欢通过SVN存储库、SVN:externals的明智使用和dynamic sys.path进行组织良好的组合) 但是这次对于一个新的服务器安装,我希望以正确的方式进行操作 所以我去了图书馆,上面写着: 建议在virtualenv中使用pip,因为每个virtualenv都自动安装了pip。这不需要root访问权限或修改系统Python安装。[……] 然后我去了一家公司,它建议: 您可以使用pip install virtualenv

我已经在使用pip和virtualenv(实际上,有时我仍然更喜欢通过SVN存储库、SVN:externals的明智使用和dynamic sys.path进行组织良好的组合)

但是这次对于一个新的服务器安装,我希望以正确的方式进行操作

所以我去了图书馆,上面写着:

建议在virtualenv中使用pip,因为每个virtualenv都自动安装了pip。这不需要root访问权限或修改系统Python安装。[……]

然后我去了一家公司,它建议:

您可以使用pip install virtualenv安装virtualenv,也可以使用pip install virtualenv==dev安装最新开发版本。您还可以使用easy_install[…]

当然,pip应该取代easy_安装:)

诚然,它们都解释了所有可供选择的安装方式

但是哪一个应该先去?我是否应该支持全系统pip

我看到了一个值得思考的主要原因,但可能还有其他原因

  • 我是想为box的所有用户提供便利,还是这是一个针对运行某些服务的单个用户的服务器
如果我想让每个人都有一个虚拟环境,我可能只需要安装一个系统范围的pip(例如,使用ubuntu do
sudo aptitude install python pip
,然后使用它来安装virtualenv
sudo pip install virtualenv

编辑另一个需要考虑的原因:安装说明(但不是安装说明)说:

注意:为了使用VirtualEnvrapper,您必须单独安装virtualenv

不太清楚“分开”是什么意思(我从未注意到)

否则,哪一个应该先走,这真的有区别吗

相关的: 最接近的问题(和答案)是以下第一个问题(特别请参见@elarson-answer),第二个问题看起来过于复杂:


但我觉得这一切都无法完全回答我的问题:全系统vs.本地,但pip或virtualenv是否应该先走一步(为什么他们一开始就把它们发送给另一个!!!)

。(让它沉下去,哈哈。)

但更严重的是,你的系统上真的有多个用户吗?现在,即使是Linux主机也倾向于为单个用户提供服务,如果有多个用户ID,它们往往是在各种隔离的用户ID下运行多个进程的服务器。有鉴于此,让所有用户的生活变得更轻松并不那么重要

另一方面,使用Python的多个服务可能会有相互冲突的需求,这可能很少见,因为它甚至可以归结为所需的
pip
。鉴于此,我倾向于选择virtualenv的全局安装,以实现Python的原始准安装

但我想指出另一个想法:建筑

Buildout与virtualenv做了同样的事情,但采用了一种截然不同的方法。您可以编写一个构建配置文件(
buidout.cfg
),其中列出各种鸡蛋以及它们的连接方式,并指定设置特殊情况的“构建配方”设置(如Django部署、构建机器人服务器、Plone网站、Google app engine应用程序等)

然后,使用系统Python引导构建并运行它,它将生成一个类似virtualenv的独立设置


但最棒的是:它是可重复的。您可以将相同的
buildout.cfg
带到另一台主机,并获得相同的设置。这比使用virtualenv更难做到

tl;博士的答案首先是虚拟的。 对于Python版本2.x和3.x,您可以有两个

[编辑]

我真的怀疑安装(没有安装,你只是下载并执行一个脚本)VirtualEnv系统范围/每个用户是否重要。使用VirtualEnv的全部目的是创建独立的开发沙盒,以便一个项目中的库不会相互冲突。例如,您可以在两个不同的虚拟环境中使用Beauty soup版本<4.x的Python2.x项目和使用Beauty soup版本4.0的Python3.x项目


如何在系统上获得VirtualEnv脚本并不重要,因为一旦获得了它并且pip在VirtualEnv中是自包含的,那么首先获得VirtualEnv就很有意义了。同样,一旦您使用python,您将有许多项目,对于每个项目,推荐的方法是拥有一个虚拟环境,然后通过pip安装依赖项。您可以稍后执行“pip freeze>requirements.txt”和“pip install requirements.txt”来简单地跨两个系统复制您的确切库(比如开发和生产),等等……

尚未确定最终的解决方案,但这正是目前部分基于@nutjob注释的情况(不,我暂时还没有切换到buildout,但稍后我会花一些时间!)

我有一个大而强大的服务器,有很多django应用程序。 我主要使用gunicorn+supervisord

这些要求规定了以下内容,但稍微不同的设置可能会使其有所不同

  • 我已经根据代码/函数的相似性将这些应用程序逻辑地组织在集群中;每个集群可能都有相同版本的公共python库(pylibmc、pillow等)
  • 我创建了几个用户,每个集群一个
  • 对于每个用户,我通过下载virtualenv.py并运行
    python virtualenv.py VIRTUALENVNAME
    ,安装一个virtualenv(与用户同名,由我自己选择);我不安装virtualenv包装器
  • 我编辑该user.bashrc,以便立即加载virtualenv
  • 我用pip安装了常见的软件包,但在direc中添加了更具体的软件包