我已经使用了pip和virtualenv(实际上有时候仍然喜欢通过SVN存储库组织良好的组合,明智地使用svn:externals和动态sys.path)。
但是这次安装新的服务器我想以正确的方式做事。
所以我转到pip installation page并说:
使用pip的推荐方法是在virtualenv中,因为每个virtualenv都会自动安装pip。这不需要root访问权限或修改系统Python安装。 [...]
然后我转到virtualenv installation page并建议:
您可以使用pip install virtualenv安装virtualenv,或使用pip install virtualenv == dev安装最新的开发版本。您也可以使用easy_install [...]
pip应该取代easy_install,当然:)
当然,他们都解释了所有其他安装方式。
但是...... 哪一个应该先行? 并且我应该支持全系统pip还是不支持?
我看到了思考的主要原因,但可能还有其他人
如果我希望每个人都有可用的虚拟环境,我可能只需要安装一个系统范围的pip(例如,用ubuntu做sudo aptitude install python-pip
然后用它来安装virtualenv sudo pip install virtualenv
)。
修改另一个值得思考的理由:virtualenvwrapper安装说明(但不是docs)说:
注意为了使用virtualenvwrapper,您必须单独安装virtualenv。
不完全确定“分开”是什么意思(我从未注意到)。
否则,哪一个应该先行,是否真的有所作为呢?
最接近的问题(和答案)是下面的第一个问题(特别是参见@elarson答案),第二个看起来过于复杂:
但是我觉得这完全没有回答我的问题:系统范围与本地问题,但也应该pip或virtualenv先行(并且为什么他们将每一个发送到另一个开始!!!)
答案 0 :(得分:6)
tl; dr答案首先是VirtualEnv。 对于Python版本2.x和3.x
,每个都可以有两个[编辑]
我真的很怀疑是否安装(没有安装,你只需下载并执行脚本)VirtualEnv系统范围/每用户甚至是重要的。使用VirtualEnv的重点是创建独立的开发沙箱,以便一个项目中的库不会相互冲突。例如,您可以使用Beautiful-soup Version< 4.x和一个Python 3.x项目在两个不同的虚拟环境中使用Beautiful-soup Version 4.0。
如何在系统上获取VirtualEnv脚本并不重要,因为一旦你拥有它并且pip是自包含在VirtualEnv中的,那么首先获取VirtualEnv是有意义的。一旦你使用python,你将拥有许多项目,并且对于每个项目,推荐的方法是拥有一个虚拟环境,然后通过pip安装依赖项。您可以稍后执行“pip freeze> requirements.txt”,然后执行“pip install requirements.txt”,只需在两个系统中复制您的确切库[比如dev和production]等等......
答案 1 :(得分:1)
一半,六打另一半。 (让我沉入其中。哈哈。)
但更严重的是,您真的在您的系统上拥有多个用户吗?目前,即使是Linux主机也往往是针对单个用户,而且有多个用户ID,它们往往是在各种隔离用户ID下运行多个进程的服务器。鉴于此,让所有用户的生活更加轻松并不那么重要。
另一方面,每个使用Python的多个服务可能会有相互冲突的要求,很少见,因为它可能归结为pip
的所需版本。鉴于此,我倾向于选择virtualenv的全局安装,以便对Python进行原始的准安装。
但我想指出另一个想法:Buildout,http://www.buildout.org/
Buildout与virtualenv做同样的事情,但采取了一种截然不同的方法。您编写了一个buildout配置文件(buidout.cfg
),列出了您的各种鸡蛋以及它们将如何连接,并指定设置特殊情况的“buildout recipes”设置(如Django部署,Buildbot服务器) ,Plone网站,Google应用引擎应用等。)。
然后,您使用系统Python来引导构建,运行它,并生成一个独立的设置,就像virtualenv一样。
但最好的部分:它是可重复的。您可以将相同的buildout.cfg
带到另一台主机并获得相同的设置。 很多使用virtualenv更难!
答案 2 :(得分:1)
尚未确定最终解决方案,但现在正在发生的事情部分基于@nutjob的评论(不,我暂时还没有切换到buildout,但我稍后会花一些时间来做它!)
我有一个功能强大的大型服务器,有很多django应用程序。 我主要使用gunicorn + supervisord。
这些要求规定了以下内容,但略有不同的设置可能会使它与众不同。
python virtualenv.py VIRTUALENVNAME
来安装virtualenv(与用户同名,供我自己选择);我没有安装virtualenv wrapper 这意味着每个用户都拥有自己的,单一的virtualenv。
如果我从头开始,我可能会转移到一个扩建或类似的解决方案(我不喜欢混合主管和virtualenv时会发生什么),但我现在对这个很满意。