Django,可以运行两个不同的版本吗?

Posted

技术标签:

【中文标题】Django,可以运行两个不同的版本吗?【英文标题】:Django, is possible to run two different versions? 【发布时间】:2010-12-19 20:16:01 【问题描述】:

我有一个服务器,我有两个用 Django 和 Python 构建的站点,一个站点是主要站点,是用旧版本的 django 构建的,另一个是新版本,我已经升级到新版本和主要方面我的其他网站已经坏了,是否可以告诉该网站在 python 路径中使用不同的版本?在虚拟主机中?

我急需帮助!

更多信息,它位于 linux 和服务器用户 mod python 上,这是我正在尝试使用 vitrualhost 的内容

<Location "/">
        SetHandler python-program
        PythonHandler django.core.handlers.modpython
        SetEnv DJANGO_SETTINGS_MODULE website.settings
        SetEnv PYTHON_EGG_CACHE /var/cache/pyeggcache
        SetEnv PYTHONPATH "sys.path + ['usr/lib/python2.6/site-packages/django2']"
        PythonDebug On
        PythonPath "['/var/www/website_live/src'] + ['/var/www/webiste_live/src/website'] + sys.path"
    </Location>

我已将网站名称替换为“网站”,我的单独版本的 django 位于 /usr/lib/python2.6/site-packages/django2

【问题讨论】:

您绝对可以同时使用两个不同的版本。但要回答这个问题,我们需要知道您使用的是什么软件:apache、nginx、mod_python 或 mod_wsgi。 【参考方案1】:

当您在服务器上拥有多个站点时,您应该考虑使用virtualenv 之类的东西。

使用它,您可以设置不同的虚拟环境并在其中放置特定于站点的包等,而不是弄乱您的站点包文件夹。它还使开发变得更加容易,因为您可以使用您使用的任何特定版本轻松地在本地设置这些环境。

如果您使用其他应用程序,这很快就会变得非常方便,而这是 Pinax 大量使用的东西。处理包和版本的最简单方法就是创建一个需求文件。

【讨论】:

这可能是最好的,也是最简单的方法。如果您在本地遵循相同的设置,它也会使开发变得更加容易。【参考方案2】:

是的,你可以。我已经在here 上详细地写了这篇博文。

【讨论】:

【参考方案3】:

当然可以,但是需要一点点的摸索。这主要取决于您使用的服务器。

关键点是 $PYTHONPATH。此变量存储 Python 在其中查找要嵌入的模块。如果你使用

import django.conf

它确实会查看 $PYTHONPATH 中的所有目录并搜索名为 django 的文件夹。

所以关键是根据请求的去向来操纵 $PYTHONPATH。如果你碰巧使用了 mod_python 和 Apache,它可能看起来像这样:

<VirtualHost *:80>
    DocumentRoot "/var/htdocs/old_django_project"
    ServerName old-django
    PythonPath "sys.path + ['/var/software/old_django']"
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/var/htdocs/new_django_project"
    ServerName new-django
    PythonPath "sys.path + ['/var/software/new_django']"
</VirtualHost>

然后,访问http://old-django/ 会将您带到旧的 django 实例,新的 django 实例也是如此。

【讨论】:

【参考方案4】:

这是可能的,但根据我对使用不同版本的 Django 和 Python 的环境的经验,它最终会变得一团糟,特别是如果您有多个开发人员在项目上工作。然后每个开发人员需要维护两个版本的 Django 并记住他们可以使用和不能使用的功能。

【讨论】:

我发现通过使用 virtualenv 和 pip(并将它的需求文件存储在我的代码存储库中)使得维护实际上不是问题。【参考方案5】:

我使用Wigwam 处理这类事情。这是一种笨拙的方法——Apahce、Python、Django 等都有一个单独的构建——但效果很好。

【讨论】:

以上是关于Django,可以运行两个不同的版本吗?的主要内容,如果未能解决你的问题,请参考以下文章

我可以根据模式检测运行不同版本的网站吗

我可以从 2 个不同的 apache vhost 提供一个 django 应用程序吗?

虚拟核心(超线程)的两个线程可以运行不同的操作系统进程吗?

具有不同.net版本的多个应用程序可以在同一台服务器机器上运行吗

带有 django-nose 的 Django:两个相同的设置文件,在运行测试命令时具有不同的行为

我可以在我的服务器上安装和运行不同版本的 php 吗?