在 Django 项目中复用需要较低 Django 版本的应用程序

本文讲述了新手在Django1.6项目中遇到的问题,即django-editlive与Django1.4.5版本的不兼容,以及提供两种解决方案:移除global_settings.py中的过时过滤器和使用virtualenv创建隔离的Python环境。

一位 Django 和 Python 新手想要在 Django 1.6 项目/应用程序中使用 django-editlive 和 dajaxice。安装了 dajaxice 并使其正常工作后,他们克隆了 django-editlive,并在 OS X 10.9 上使用 sudo python setup.py install 安装了它。在 shell 输出中,他们注意到一个新的 django egg 被放置在 /Library/Python/2.7/site-packages/Django-1.4.5-py2.7.egg/ 中。在将 editlive 添加到 settings.py 后,他们得到了一个错误,类似于:
在这里插入图片描述

Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/Library/Python/2.7/site-packages/Django-1.4.5-py2.7.egg/django/core/management/__init__.py", line 443, in execute_from_command_line
utility.execute()
File "/Library/Python/2.7/site-packages/Django-1.4.5-py2.7.egg/django/core/management/__init__.py", line 382, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/Library/Python/2.7/site-packages/Django-1.4.5-py2.7.egg/django/core/management/__init__.py", line 252, in fetch_command
app_name = get_commands()[subcommand]
File "/Library/Python/2.7/site-packages/Django-1.4.5-py2.7.egg/django/core/management/__init__.py", line 101, in get_commands
apps = settings.INSTALLED_APPS
File "/Library/Python/2.7/site-packages/Django-1.4.5-py2.7.egg/django/utils/functional.py", line 184, in inner
self._setup()
File "/Library/Python/2.7/site-packages/Django-1.4.5-py2.7.egg/django/conf/__init__.py", line 42, in _setup
self._wrapped = Settings(settings_module)
File "/Library/Python/2.7/site-packages/Django-1.4.5-py2.7.egg/django/conf/__init__.py", line 135, in __init__
logging_config_func(self.LOGGING)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/logging/config.py", line 803, in dictConfig
dictConfigClass(config).configure()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/logging/config.py", line 568, in configure
'filter %r: %s' % (name, e))
ValueError: Unable to configure filter 'require_debug_true': Cannot resolve 'django.utils.log.RequireDebugTrue': No module named RequireDebugTrue

他们意识到,这个错误是由 egg 中的 global_settings.py 引起的,该文件尝试配置一个 Django 1.6 中不再存在的过滤器。他们的应用程序运行在 Django 1.6 上。

2. 解决方案

方案一: 移除 global_settings.py 中的过滤器

最简单的解决方案是删除该过滤器。但是,如果存在更微妙的不兼容性该怎么办?如何在 Django 1.6 项目中正确地复用一个需要 Django>=1.3,<=1.4.5 的应用程序?

方案二: 使用 virtualenv

virtualenv 可以创建一个与系统环境隔离的 Python 环境。这可以用来安装不同版本的 Django,并在不同的环境中运行不同的应用程序。

# 创建一个新的 virtualenv 环境
$ virtualenv my_env

# 激活 virtualenv 环境
$ source my_env/bin/activate

# 在 virtualenv 环境中安装 Django 1.4.5
$ pip install Django==1.4.5

# 在 virtualenv 环境中安装 django-editlive
$ pip install django-editlive

# 运行 django-editlive
$ python manage.py runserver

通过使用 virtualenv,应用程序可以知道其他应用程序应该在较旧的 Django 版本中运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值