4

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

4

5 回答 5

6

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

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

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

于 2009-11-24T14:32:00.010 回答
5

是的,你可以。我在这里详细地写了一篇关于这个的博客。

于 2009-11-24T10:59:10.417 回答
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 实例,同样也可以访问新的 django。

于 2009-11-24T10:57:04.640 回答
0

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

于 2009-11-24T13:41:07.430 回答
0

我用Wigwam做这类事情。这是一种笨拙的方法——Apahce、Python、Django 等每个都有一个单独的构建——但它工作得很好。

于 2009-11-24T16:33:16.583 回答