【问题标题】:Is there a way to install Django 1.2 and 1.3 side by side?有没有办法并排安装 Django 1.2 和 1.3?
【发布时间】:2011-09-14 15:05:59
【问题描述】:

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

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

【问题讨论】:

标签: django apache mod-wsgi django-1.3


【解决方案1】:

考虑在 virtualenv 中安装 Django。这将使 Python 模块(包括 Django)的安装完全独立于系统的其余部分。这样,如果你有多个 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,但会使事情变得相当复杂。

【讨论】:

  • 如何在 Apache 中使用 virtualenv?
  • @gaearon:由于代码块,我已将其编辑为答案。 This link 对这些行的作用进行了完整的解释,来自 virtualenv 站点。
【解决方案2】:

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

【讨论】:

  • 这确实是一个选项,但有点复杂。每当您使用 Django 1.2 时,请不要忘记使用 export PATH=/Library/Python/2.6/site-packages/django-1.2/bin:$PATH 之类的东西正确设置 PATH,以便您运行正确的 django-admin 脚本来创建 1.2 项目。这对 ./manage.py 你来说不是必需的。
  • @Igmar:感谢您的彻底回答。但是我使用 Apache 和 mod_wsgi,而不是 runserver。有没有办法这样配置?
  • @gaearon:快速浏览一下 mod_wsgi 文档会发现 WSGIPythonPath,尽管如果你有 mod_wsgi 2.x,它似乎不会做你想做的事。适用于任何版本的只是在任何 Django 导入发生之前修改 Python 中的路径,这将在 wsgi 脚本中(一个 mod_wsgi 调用以与您的应用程序对话)。 Django 的deployment documentation 有一个关于如何做到这一点的示例。
【解决方案3】:

当我需要做这样的事情时,我发现 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-24
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多