我有一个服务器,我有两个用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
答案 0 :(得分:6)
如果服务器上有多个网站,则应考虑使用virtualenv之类的内容。
使用它可以设置不同的虚拟环境,并在此处放置特定于站点的软件包,而不是弄乱您的站点包文件夹。它还使开发变得更加容易,因为您可以使用您使用的特定版本轻松地在本地设置这些环境。
如果您使用其他应用程序,这很快就会变得非常方便,这是Pinax非常重视的。处理包和版本的最简单方法就是创建一个需求文件。
答案 1 :(得分:5)
是的,你可以。我已在here上详细介绍了这一点。
答案 2 :(得分: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实例。
答案 3 :(得分:0)
这是可能的,但根据我对使用Django和Python的不同版本的环境的体验,它往往会变得混乱,特别是如果您有多个开发人员在处理这些项目。然后,每个开发人员都需要维护两个版本的Django,并记住它们能够和不能使用哪些功能。
答案 4 :(得分:0)
我使用Wigwam来做这类事情。这是一个严厉的方法 - 每个Apahce,Python,Django等都有一个单独的构建 - 但是它运行得很好。