Есть ли способ установить Django 1.2 и 1.3 рядом? - PullRequest
2 голосов
/ 14 июня 2011

Мне нужно использовать Django 1.2 для одного из моих проектов.
У меня также уже есть несколько проектов, работающих на Django 1.3 на одном сервере, и мне нужно, чтобы они работали

Есть ли способ использовать 1.2 только для конкретного проекта?
Оба сайта работают на Apache через mod_wsgi.

Ответы [ 3 ]

8 голосов
/ 14 июня 2011

Рассмотрите возможность установки Django внутри virtualenv .Это сделает установку модулей Python, включая Django, полностью независимой от остальной системы.Таким образом, если у вас есть несколько virtualenv, у вас может быть установлено столько версий Django (по одной на env).

Чтобы использовать virtualenv, вы должны отредактировать index.wsgi и добавить следующие две строки перед любойдругая строка, которая импортирует или ссылается на Django:

activate_this = '/path/to/env/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))

Предполагается, что вы не используете другую версию самого интерпретатора python, что возможно при использовании virtualenv, но усложнит ситуацию.

2 голосов
/ 14 июня 2011

Да. Django - это обычный Python-модуль, который находится в ваших site-packages . Поэтому, когда вы import django.something, Python решает, какую версию загружать, идя по пути Python (import sys; print sys.path) по порядку и ища каталог с именем django (с thing.py или * 1007). * что-то / _ init _. py внутри). Он загружает первый найденный. Поэтому самый быстрый способ - изменить этот путь Python перед началом проекта, что удобно сделать с помощью переменной среды с именем PYTHONPATH.

Итак, для вашего проекта Django 1.2 установите Django 1.2 в site-packages / django-1.2, а затем:

# run Django 1.2 for old app that I don't have time to update
cd ~gaearon/src/old-django-project
env PYTHONPATH=/Library/Python/2.6/site-packages/django-1.2 ./manage.py runserver

Для всех других (Django 1.3) проектов просто установите Django как обычно, что делает его по умолчанию:

# all other projects use the system default Django 1.3
cd ~gaearon/src/current-django-project
./manage.py runserver

Для производственных серверов вы не будете использовать runserver, но PYTHONPATH будет работать везде, где вы вызываете Python (то есть, flup или manage.py runfcgi). Если вызывается из mod_python, существует директива конфигурации Apache для изменения пути Python (см. Документацию mod_python).

Или вы можете использовать virtualenv .

1 голос
/ 14 июня 2011

Когда мне нужно сделать что-то подобное, я обнаружил, что virtualenv в сочетании с virtualenvwrapper очень помогает.

> mkvirtualenv django1.2
> cd django-1.2-dist-dir
> python setup.py install 
> mkvirtualenv django1.3
> cd django-1.3-dist-dir
> python setup.py install 

Теперь обе версии Django установлены в их собственных виртуальных средах. Чтобы использовать определенный, выполните:

> workon django1.2

или

> workon django1.3
...