我需要在我的一个项目中使用Django 1.2 我也已在同一台服务器上运行Django 1.3上的几个项目,我需要让它们继续运行。
有没有办法只为特定项目使用1.2? 这两个站点都通过mod_wsgi在Apache上运行。
答案 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)
当我需要做这样的事情时,我发现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