对于每个项目和每个阶段(dev,prod,...),我使用不同的linux用户。我可以使用pip和--user
选项在$ HOME中安装包。
我的孤立环境来自不同的Linux用户。
我可以从virtualenv获得哪些好处?到目前为止,我认为没有理由使用virtualenv。但也许我错过了一些东西。
Linux用户名的构建方式如下:project_name_S和S是阶段(dev,qual,prod,testing)。每个阶段都可以在不同的主机上。
更新
在提出这个问题三年多之后:我现在使用virtualenv。 user-environment是错误的。也许现在有更好的支持。但是没有什么可以阻止你在$ HOME中创建virtualenv: - )
答案 0 :(得分:3)
创建virtualenv比创建新用户更快更容易。我不打算推荐现有项目的转换,但考虑新项目。
答案 1 :(得分:3)
Virtualenv非常适合管理依赖项。配置文件(或设置文件)非常适合管理环境之间的变量差异。 (例如db location e.tc)
蟒蛇搭便车指南非常好,值得20分钟阅读。 http://docs.python-guide.org/en/latest/index.html
请参阅有关虚拟环境的此部分。
http://docs.python-guide.org/en/latest/dev/virtualenvs/
如果你只想使用不同的home或env模式变量,你可以在运行python代码之前设置它。
PROD_MODE=PROD python example.py
然后example.py会查找PROD_MODE变量。
import os
print os.environ['PROD_MODE']
那么你需要一个virtualenv吗?
我强烈推荐它。所以你有Django工作,你已经导入了一些其他库(我也强烈推荐pip),一切都在你的机器上工作。您的路径已设置,您的代码可以使用PATH和PYTHON_PATH解析为代码。辉煌!
现在你来部署在另一台机器上(可能是aws,一台linux服务器或类似机器)或者其他开发人员想要帮助你的项目代码。他们如何确保机器上的环境设置与您的相同,以及如何确保使用相同的env进行部署,并测试了所有新的代码? virtualenv为您做到这一点!您只需在新机器上移植或重新创建虚拟环境,任何一切都可以像测试/构建一样工作。
简而言之,虚拟环境可帮助您确保在发布/部署代码时记住所有导入,安装和路径设置时不会感到头疼。
答案 2 :(得分:1)
你使用virtualenv获得的一些你没有得到用户或家庭计划的东西:
能够使用不同版本的软件包 - 例如,django stable和django dev用于不同的站点,而不会污染系统范围的Python安装(或用户的python安装)。
能够冻结包需求并轻松复制运行环境。您可以使用备用安装方案执行此操作,但您将非常受限于您可以执行的操作(就要安装的软件包而言),您必须手动跟踪您的需求文件。
一般情况下,我建议您重新访问virtualenv以进行下一个项目。