2

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

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

4

3 回答 3

8

考虑在virtualenv中安装 Django 。这将使 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,但会使事情变得更加复杂。

于 2011-06-14T11:40:02.670 回答
2

是的。Django 只是一个普通的 Python 模块,存在于您的site-packages中。因此,当你决定加载哪个版本时import django.something,Python 决定加载哪个版本的方式是按顺序沿着 Python 路径 ( import sys; print sys.path) 并查找名为 django 的目录(其中包含something.pysomething/_ 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

For production servers you won't use runserver, but the PYTHONPATH will work wherever you invoke Python (i.e. flup, or manage.py runfcgi). If invoked from mod_python there is an Apache configuration directive to modify the Python path (see mod_python documentation).

Or you could use virtualenv.

于 2011-06-14T11:47:47.067 回答
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
于 2011-06-14T11:40:47.247 回答