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

2024-04-24 15:59:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我对django和python比较陌生,所以我想我在这里遗漏了一些基础知识。在

我想在我的django1.6项目/应用程序中使用django-editlive,因此也要使用dajaxice。在

首先,我安装了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添加到我的设置.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

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

/Library/Python/2.7/site-packages/Django-1.4.5-py2.7.egg/Django/conf/global_设置.py包含:

^{pr2}$

现在简单的解决方案当然是移除过滤器。但如果有更微妙的不相容呢?如何在我的django1.6项目中正确地重用requiresDjango>=1.3,<=1.4.5?我对virtualenv的拙劣理解告诉我,这不是解决方案,对吧?editlive不应该尝试使用Django1.6,可能会失败得很惨,但至少不要安装并尝试使用Django的旧版本?如果virtualenv是解决方案,那么我的应用程序如何知道另一个应用程序应该在旧的Django版本中运行?你现在可以知道我在这里缺乏一些基础知识。谢谢你帮助我!在


Tags: djangoinpyself应用程序executeinitegg
1条回答
网友
1楼 · 发布于 2024-04-24 15:59:17

好的,谢谢你的评论。你帮助我回答了我的问题,提高了我的基本理解。不是所有对我问题的评论都是100%正确的。我必须强调,Django次要发行版都是向后兼容的,除非发行说明中另有说明,而且除了不推荐的版本。请阅读Django release process。在

因此,基本上所有为django1.4.5或1.5.5编写的代码都应该在django1.6下运行,而且您应该能够混合使用它。因此,可以编写一个django1.6应用程序,重用一个1.4.5应用程序和一个1.5.5应用程序,只要您在Django版本1.6<;=version<;2.0中运行它。在

在我的例子中,问题是editlive定义了它对Django的依赖关系>;=1.3,<;=1.4.5,这导致安装工具将Django 1.4.5下载并安装到我的系统上。我没有意识到,从那时起,我自己的应用程序就开始使用django1.4.5。之后引发的错误是由于在我自己的应用程序中使用了django.utils.log.RequireDebugTrue。这个过滤器只在django1.5中引入,因此不能在1.4.5下运行。在

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

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

相关问题 更多 >