我需要使用virtualenv吗?

4

对于每个项目和每个阶段(开发,生产等),我使用不同的Linux用户。我可以使用pip和--user选项,在$HOME中安装软件包。

我的隔离环境来自不同的Linux用户。

使用virtualenv会带来哪些好处?到目前为止,我看不出使用virtualenv的理由。但也许我漏掉了什么。

Linux用户名称的构建方式是:project_name_S,其中S是阶段(dev、qual、prod、testing)。每个阶段可以在不同的主机上。

更新:

在提问这个问题三年多之后:现在我使用virtualenv。 user-environment存在错误。也许现在有更好的支持。但是你可以在$ HOME中创建一个虚拟环境 :-)


我会接受这个答案,但我会等几天。也许有人可以告诉我为什么我需要使用virtualenv。到目前为止,我还没有看到理由。 - guettli
添加了新的细节来回答“我是否需要虚拟环境”的问题。 - Matt Alcock
3个回答

4
虚拟环境非常适合管理依赖项。配置文件(或设置文件)非常适合管理环境之间的变量差异。(例如,数据库位置等)
Python Hitchhiker's Guide非常好,值得花20分钟阅读。 http://docs.python-guide.org/en/latest/index.html 请参阅有关虚拟环境的此部分。

http://docs.python-guide.org/en/latest/dev/virtualenvs/

如果您只想使用不同的主目录或环境模式变量,您可以在运行Python代码之前设置它。

 PROD_MODE=PROD python example.py

example.py 会像这样寻找 PROD_MODE 变量。
import os
print os.environ['PROD_MODE']

那么你需要一个虚拟环境吗?

我强烈推荐使用。所以你已经让Django工作,并导入了一些其他库(我也强烈推荐pip),并且在您的机器上一切正常。您的路径设置正确,您的代码可以使用PATH和PYTHON_PATH解析到代码。太棒了!

现在您要在另一台计算机上部署(也许是AWS、Linux服务器或类似的)或者其他开发人员想在您的项目上协助编码。他们如何确保他们的机器上的环境设置与您的完全相同,您如何确保您部署的是与您测试所有新代码的相同环境?虚拟环境为您完成这些操作!您只需将虚拟环境移植或重新创建到新的机器上即可,所有内容都像测试/构建的那样正常。

简而言之,虚拟环境可帮助您确保在发布/部署代码时不必记住所有导入、安装和路径设置,从而避免头疼。


亲爱的Matt,像“结构是关键”这样的Python指南中有趣的章节是空的。 - guettli
同意,这是一个不断发展的文档。我建议为每个环境创建一个settings.py文件,并为所有环境创建一个pip文件,以确保依赖关系的一致性。 - Matt Alcock

3

创建一个虚拟环境应该比创建新用户更快更容易。我不建议为现有项目切换,但对于新项目可以考虑使用。


是的,创建虚拟环境更快。但到目前为止,这对我来说不是问题。我不会每天设置新系统。如果我需要,这可以自动化。单独的操作系统用户让我感到安全。一个系统不能杀死另一个系统的进程,也不能删除文件。 - guettli

1

使用virtualenv而不是用户或主目录方案,您可以获得以下一些东西:

  1. 能够使用不同版本的软件包 - 例如,对于不同的站点,django stable和django dev,而不会污染系统范围内的Python安装(或用户的python安装)。

  2. 能够冻结软件包要求并轻松复制运行环境。您可能可以使用备用安装方案来完成此操作,但您将受到非常有限的限制(在要安装的软件包方面),您必须手动跟踪您的要求文件。

总的来说,我建议您为下一个项目重新考虑virtualenv。


对我来说,一个站点就像一个项目。这意味着每个站点都有不同的$HOME并且可能拥有不同的Django版本。Django被安装在$HOME中。 - guettli
冻结环境听起来不错。我从未使用过它。但这是一个pip命令。我想它可以在没有虚拟环境的情况下使用。文档中没有关于虚拟环境要求的说明:http://www.pip-installer.org/en/latest/requirements.html#freezing-requirements - guettli
我在每个阶段都使用相同的settings.py文件。我的变量SYSTEM(例如:fooapp_customerx_d)。数据库名称和数据库用户使用此变量。还有一个名为STAGE的变量。有一些if语句。例如:为开发系统添加django-debugtoolbar。 - guettli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接