有没有办法并排安装Django 1.2和1.3?

时间:2011-06-14 11:31:41

标签: django apache mod-wsgi django-1.3

我需要在我的一个项目中使用Django 1.2 我也已在同一台服务器上运行Django 1.3上的几个项目,我需要让它们继续运行。

有没有办法只为特定项目使用1.2? 这两个站点都通过mod_wsgi在Apache上运行。

3 个答案:

答案 0 :(得分:8)

考虑在virtualenv内安装Django。这将使包括Django在内的python模块的安装完全独立于系统的其余部分。这样,如果你有多个virtualenvs,你可以安装多个版本的Django(每个env一个)。

要使用virtualenv,您需要编辑index.wsgi并在导入或引用Django的任何其他行之前添加以下两行:

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

这假设您没有使用不同版本的python解释器本身,这可能使用virtualenv,但会使事情变得更复杂。

答案 1 :(得分:2)

是。 Django只是一个生活在 site-packages 中的常规Python模块。因此,当您import django.something时,Python决定加载哪个版本的方式是按顺序沿着Python路径(import sys; print sys.path)向下走,并查找名为django的目录( something.py 某事/ _ init _。py 在里面)。它加载它找到的第一个。因此,最快的方法是在启动项目之前修改此Python路径,这可以通过名为PYTHONPATH的环境变量方便地完成。

因此,对于您的Django 1.2项目,请在site-packages / django-1.2中安装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

答案 2 :(得分:1)

当我需要做这样的事情时,我发现virtualenvvirtualenvwrapper相结合有很大帮助。

> 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