Django, is possible to run two different versions?
I have a server on which I have two sites built with Django and Python, one site is major site is build with an older version of django, the other with the newer release, I have upgraded to the new release and major aspects of my other site have broken, is it possible to tell the site to use a different version in say the python path? in the virtualhost?
I am desperate for help!
开发者_运维知识库Some more info, it is on a linux and server users mod python, here is what I am trying with the 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>
I have replaced the website name with 'website' my seperate version of django lives at /usr/lib/python2.6/site-packages/django2
When you have more than one site on a server, you should consider using something like virtualenv.
Using that you can setup different virtual environments and place site specific packages and such in there, instead of messing up your site-packages folder. It also makes development a lot easier as you easily can setup these environments on your local with specific versions of whatever you use.
This quickly becomes very handy if you use other apps, and this is something that Pinax uses very heavily. The easiest way to handle packages and versions is simply to create a requirements file.
Yes, you could. I have blogged about this at length over here.
Of course it is, but it will require a bit of nestling. It depends mainly on which server you use.
The key point is the $PYTHONPATH. This variable stores, where Python looks for modules to embed. If you use
import django.conf
it really looks through all dirs in $PYTHONPATH and searches for a folder called django
.
So the key is to manipulate $PYTHONPATH depending on where the request goes to. If you happen to use mod_python and Apache, it could look like this:
<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>
Then, visiting http://old-django/
brings you to the old django instance, and the new-django likewise.
It is possible, but in my experience of an environment that used different versions of both Django and Python it tends to end up getting messy, especially if you have more than one developer working on the projects. Each developer then needs to maintain two versions of Django and remember which features they can and cannot use.
I use Wigwam for this sort of thing. It's a heavy-handed approach — there's a separate build of each of Apahce, Python, Django, etc. — but it works quite well.
精彩评论