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

4
我有一个服务器,在上面使用Django和Python构建了两个网站,其中一个主要网站是使用较旧版本的Django构建的,另一个则是使用新版本构建的。我已经升级到新版本,但是我的另一个网站的主要方面已经出现问题了。是否可能告诉该网站在Python路径或虚拟主机中使用不同版本?
我非常需要帮助!
更多信息:它在Linux上运行,并使用mod python。这是我在虚拟主机中尝试的内容。
<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。 - Eugene Morozov
5个回答

7
当您在服务器上有多个站点时,应考虑使用类似virtualenv的东西。使用它可以设置不同的虚拟环境,并将特定于站点的软件包等放置在其中,而不是破坏您的site-packages文件夹。这也使得开发更加容易,因为您可以轻松地在本地设置这些环境,并使用您使用的特定版本。如果您使用其他应用程序,则这很快变得非常方便,这是Pinax非常重视的内容。处理软件包和版本的最简单方法是创建一个要求文件。

这可能是最好的,也是最简单的方法。如果您在本地遵循相同的设置,它还可以使开发更加容易。 - Alex Jillard

5

是的,你可以。我在这里详细介绍了此事。


1

当然可以,但需要进行一些嵌套。这主要取决于您使用的服务器。

关键点在于$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实例,而new-django同样如此。


0

这是可能的,但在我的经验中,如果您的环境使用了不同版本的Django和Python,情况往往会变得混乱,特别是如果有多个开发人员在项目上工作。每个开发人员都需要维护两个版本的Django,并记住他们可以使用哪些功能和不能使用哪些功能。


1
我发现使用virtualenv和pip(并将其要求文件存储在我的代码存储库中)使得维护几乎不成问题。 - John Paulett

0

我在这种情况下使用 Wigwam。 这是一种笨重的方法——每个 Apahce、Python、Django 等都有一个单独的构建——但它相当有效。


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