【问题标题】:How to downgrade Django from dev to 1.1如何将 Django 从 dev 降级到 1.1
【发布时间】:2010-12-15 16:31:46
【问题描述】:

我正在运行 Django 的开发版本,由于对 CSRF 的更改,文件浏览器应用程序似乎与主干不兼容。如何降级到正式版(1.1)?

我在一个共享主机上工作,我目前运行 Django 的方式如下:

~/local/lib/python2.6/site-packages/ 包含/django/ 以及其他几个文件夹(每个应用一个文件夹)。

~/local/lib/python2.6/site-packages/ 在 python 路径上。

/site-packages/ 中还有一个指向/projectname/ 的符号链接,其中包含项目文件(manage.py、settings.py 等)。

我正在使用 FastCGI,因此在 /public_html/ 中我有一个用于调用 django.core.servers.fastcgi.runfastcgidispatch.fcgi.htaccess 文件用于将所有请求重定向到 dispatch.fcgi 以便 Django 可以处理它们。

我尝试删除(移出 python 路径)/django/,然后下载 Django 的发布版本并将其放在之前的 /django/ 文件夹所在的位置。这产生了以下错误:

没有名为 CSRF 的模块。

我从/trunk/ 下载了middleware/csrf.py,它清除了第一个错误,但随后又产生了其他错误。

我应该如何降级到 1.1?从头开始并非不可能,但如果可能的话,我显然宁愿避免这样做。

【问题讨论】:

    标签: django downgrade


    【解决方案1】:

    在您的/site-packages/ 目录中查找Django-1.other_stuff.egg-info 文件并删除您找到的任何文件,然后重试(1.1 的代码仍在site-packages/django/ 目录中。如果这不起作用,只需重新运行来自最新版本 tarball (python setup.py install) 的 Django 安装程序,你应该很好。

    或者,如果您有pip installed,您可能只需在终端中执行pip install -U Django==1.1.1

    注意那些 egg-info 文件和 pip 命令中 Django 中的大写 D

    【讨论】:

    • 不幸的是,使用 python setup.py install 是不可能的,因为我没有足够的权限来编辑 /usr/ 中的任何内容(我只能修改 /home/username/
    • 我忘了补充:也没有.egg文件。
    • 您使用哪个版本的 Django 创建项目?如果您使用主干创建项目,假设您还没有走得太远,请使用 1.1 重新开始。默认 settings.py 有一些更改(特别是加载那些新的 CSRF 中间件),这些更改不适用于旧版本的 Django。另外,您应该考虑在您的主机 (pypi.python.org/pypi/virtualenv) 中使用 virtualenvs 来隔离和更好地控制您的环境。
    • 第一:我刚刚做了一个pip install -u django=1.1.3,没有大写D,它工作得很好,所以虽然其他地方可能需要它,但pip的情况却没有. --- 第二次:我意外地将 Django 升级到 1.5.1,因为 pip 将它视为对我正在安装的其他东西的依赖。但是,此主机上的应用程序尚未从 1.1 迁移,因此它按预期中断。快速pip install -U django=1.1.3,它又恢复了正常工作。 我现在对pip印象深刻
    【解决方案2】:

    我已经成功降级,这实际上是一个非常简单的过程。希望这能帮助那些忽视我所做的事情的人。

    1.1.1 中 django-admin.py 的 startproject 命令创建的 settings.py 文件与当前开发版本略有不同。

    startproject 在当前的开发版本中有一个额外的中间件类 - csrf。 1.1.1 中的 startproject 命令创建了相同的 settings.py,但删除了第三个类。注释掉或删除这一行可以让 Django 正常工作。

    MIDDLEWARE_CLASSES = (
        'django.middleware.common.CommonMiddleware',
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.csrf.CsrfViewMiddleware', #additional middleware class
        'django.contrib.auth.middleware.AuthenticationMiddleware',
    )
    

    【讨论】:

      【解决方案3】:

      你可以在你的用户空间中安装你想要的版本的 django,比如 /home/me/lib/

      那么如果你在你的 mysite.wsgi 中使用 mod_wsgi 有一行:

      sys.path.insert(0,'/home/me/lib/Django-1.1')
      

      这将确保从您的安装中加载 django,而不是从服务器范围加载。

      您还需要调整 shell 环境路径变量,以便启动正确的 django-admin.py 或直接运行

      python /home/me/lib/Django-1.1/django/bin/django-admin.py ...
      

      【讨论】:

      • 这是一个出色的“两全其美”,让我可以将最新的 Django 用于支持它的应用程序,而不会破坏尚未更新的应用程序。
      猜你喜欢
      • 2023-03-16
      • 2015-02-06
      • 2012-08-15
      • 1970-01-01
      • 2020-03-28
      • 2013-03-31
      • 2014-10-13
      • 2019-11-14
      相关资源
      最近更新 更多