虚拟环境 virtualenv 是否推荐用于 Django 生产服务器?

81

我一直使用virtualenv在本地主机上测试我的应用程序,因为它可以提供隔离的环境,并且可以安全地测试新版本的软件包。

现在是将我的应用程序部署到生产服务器的时候了。我想知道是否应该在生产服务器上也使用virtualenv,还是只需要进行普通安装即可。由于这是生产服务器,我始终可以使用我在开发服务器(在虚拟环境下)中测试过的正确版本。


4
请注意,官方的 Django 文档提到在生产环境中使用 virtualenv:https://docs.djangoproject.com/en/dev/howto/deployment/wsgi/modwsgi/#using-a-virtualenv。 - Paul D. Waite
我推荐@bartek的教程nginx和uWSGI部署的美丽简单性 - Sven Rojek
Heroku推荐使用它:https://devcenter.heroku.com/articles/deploying-python - Ciro Santilli OurBigBook.com
6个回答

52

如果您想在 Web 服务器上运行多个项目,那么我会建议您这样做。因为一旦您有两个项目,就有可能会因为将来任何一个 Python 包的升级而破坏另一个站点。


2
这引出了一个问题,即当您知道此服务器仅存在于为单个应用程序提供服务时,是否应使用virtualenv。 - Eric Wilson
7
您不能保证DevOps不会推出需要Python依赖项的东西。应该始终分开处理。 - Aleksey Korzun

15

虚拟环境对于 Django 生产服务器是否推荐使用?

是的,它可以使您的项目不依赖于系统环境中的某些方面,还允许您使部署过程更加清晰和可配置。

我使用 fabric、pip 和 virtualenv 部署所有我的 Django 项目。


我认为“不可靠”不是你想要的词(系统不能依赖你的项目吗?)。澄清一下用词。 - Chris Morgan

11

我认为您应该使用virtualenv将其部署到生产环境中。这会让您的工作变得更加轻松和清晰,特别是如果您计划部署多个服务,例如基于django的网站或其他Python项目。您不希望它们各自用其包污染全局Python环境。

我认为virtualenv将帮助您清晰地管理所有依赖项。

要更新您的生产环境,您只需要执行以下操作:

pip -r name_of_your_requirements_file.txt

我在生产中使用虚拟环境,你可以使用uWSGI作为应用程序服务器,Cherokee作为Web服务器来提供服务。

为了在生产中使用你的虚拟环境,你需要将其路径添加到PYTHONPATH中。

例如,如果你的虚拟环境的路径为"/home/www/my_project/env/",则需要添加的路径为:

/home/www/env/lib/python2.7/site-packages/

你可以用许多方式来设置这个,但如果你是通过manage.py生成你的FCGI或uWSGI接口,只需要在manage.py顶部(其余代码前)加上以下内容:

import os
my_virtualenv_path = "/home/www/my_project/env/lib/python2.7/site-packages/"
# Add it to your PYTHONPATH
os.path.append(my_virtualenv_path)

你可以根据你的设置进行调整,以防万一你也可以在shell中执行以下操作:

export PYTHONPATH:$PYTHONPATH:/home/www/my_project/env/lib/python2.7/site-packages/
你还需要将包含settings.py文件的目录添加到PYTHONPATH中,这样Django才能找到它。只需按照类似的方式进行即可。

3

在大多数情况下,即使您在首次设置服务器时似乎不需要它,我仍然认为最好拥有一个虚拟环境。但是如果您正在使用某种云服务并且短时间内为特定任务启动服务器,则我不认为使用虚拟环境有意义。


2

1

现在使用Docker容器进行开发和生产部署非常流行,因此如果您考虑跟随这一趋势,就不再需要virtualenv了。


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