【问题标题】:Reusing Django apps in own project which require a lower Django version在需要较低 Django 版本的项目中重用 Django 应用程序
【发布时间】:2013-12-12 22:15:00
【问题描述】:

我对 Django 和 Python 比较陌生,所以我想我在这里缺少一些基础知识。

我想在我的 Django 1.6 项目/应用程序中使用 django-editlivedajaxice

首先我安装了 dajaxice 并让它工作(尽管我遇到了类似的情况,如下所述......)。然后我从 github 克隆了 django-editlive,用sudo python setup.py install 将它安装在我的 OS X 10.9 上。我注意到在 shell 输出中放置了一个新的 django 鸡蛋:/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

我认为这个错误是因为/Library/Python/2.7/site-packages/Django-1.4.5-py2.7.egg/ 的 egg 中的 global_settings.py 试图配置一个不再存在于 Django 1.6 中的过滤器。请记住,我的应用程序使用 Django 1.6 运行。

/Library/Python/2.7/site-packages/Django-1.4.5-py2.7.egg/django/conf/global_settings.py 包含:

LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
    'require_debug_false': {
        '()': 'django.utils.log.RequireDebugFalse',
    }
},

现在简单的解决方案当然是删除该过滤器,瞧。但是,如果有更微妙的不兼容呢?如何在我的 Django 1.6 项目中正确重用需要 Django&gt;=1.3,&lt;=1.4.5 的应用程序?我对 virtualenv 的拙见告诉我这不是解决方案,对吧?不应该 editlive 尝试使用 Django 1.6 并且可能会严重失败,但至少不要安装并尝试使用旧版本的 Django?如果 virtualenv 是解决方案,我的应用程序如何知道另一个应用程序应该在旧 Django 版本中运行?

【问题讨论】:

  • 有什么理由不将自己的应用程序降级到 Django 1.4.5 吗?在我看来,这是最干净的解决方案
  • 好主意!但是假设我想重用需要 Django 1.5.5 的第三个应用程序,我将如何解决这个问题?
  • 您不能使用两个应用程序,其中一个需要 Django = 1.5.5。它们根本不兼容。
  • 总的来说,我认为 Django 1.4(及其附属版本)是目前支持最完善的版本,目前几乎没有任何库不支持它(而且 1.5 支持正在不断传播)。即使在极少数情况下你确实找到了一些支持 ahem github)
  • 是的。 "Use Django 1.4.x or fix the app myself"你说得比我好

标签: python django python-2.7 virtualenv


【解决方案1】:

好的,感谢所有 cmets。您帮助我回答了我的问题并提高了我的基本理解。并非我的所有问题都是 100% 正确的。我必须强调 Django 次要版本都是向后兼容的,除非在发行说明中另有说明并且弃用除外。请阅读Django release process

所以基本上所有为 Django 1.4.5 或 1.5.5 编写的代码都应该在 Django 1.6 下运行,而且你也应该能够混合使用。因此可以编写一个 Django 1.6 应用程序,重复使用一个 1.4.5 应用程序和一个 1.5.5 应用程序,只要在 Django 版本 1.6

我的问题是 editlive 定义了它对 Django>=1.3,django.utils.log.RequireDebugTrue。此过滤器仅在 Django 1.5 中引入,因此无法在 1.4.5 下运行。

我只需要删除整个 1.4.5 egg 目录,瞧,一切都恢复正常了。

我还没有测试editlive的功能,但至少在“编译时”没有任何错误。

【讨论】:

    猜你喜欢
    • 2011-01-31
    • 2013-10-31
    • 1970-01-01
    • 2014-11-19
    • 2013-01-13
    • 1970-01-01
    • 1970-01-01
    • 2013-08-23
    • 1970-01-01
    相关资源
    最近更新 更多