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

4 投票
5 回答
2966 浏览
提问于 2025-04-15 16:20

我有一台服务器,上面有两个用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>

我把网站的名字换成了'website',我单独的Django版本放在/usr/lib/python2.6/site-packages/django2这个路径下。

5 个回答

1

当然可以,但需要稍微调整一下。这主要取决于你使用的服务器。

关键在于 $PYTHONPATH 这个变量。它存储了 Python 查找模块的位置,也就是 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 也一样。

5

是的,你可以这样做。我在我的博客上详细讲过这个内容,可以在这里查看

7

当你在一个服务器上有多个网站时,建议你使用像 virtualenv 这样的工具。

使用这个工具,你可以创建不同的虚拟环境,把每个网站需要的特定软件包放在里面,这样就不会搞乱你的网站软件包文件夹了。这也让开发变得更简单,因为你可以在本地轻松设置这些环境,并使用你需要的特定版本。

如果你还使用其他应用,这个工具会非常方便。Pinax 就是非常依赖这个工具的。处理软件包和版本的最简单方法就是创建一个需求文件。

撰写回答