ImportError:无法导入名称SortedDict - 仅在Python 2.7上,而不是2.6

时间:2016-01-05 14:14:53

标签: django python-2.7 python-2.6

我正在尝试启动并运行Django应用程序。这些库有点过时(目前在Django 1.4上)。

当我尝试使用python 2.6时,我或多或少地工作了,但是当我使用python 2.7更改为virtualenv时,我收到错误:

Unhandled exception in thread started by <function wrapper at 0x7f057b17c320>
Traceback (most recent call last):
File "/home/colin/software/virtualenvs/barshool/lib/python2.7/site-packages/django/utils/autoreload.py", line 226, in wrapper
fn(*args, **kwargs)
File "/home/colin/software/virtualenvs/barshool/lib/python2.7/site-packages/django/core/management/commands/runserver.py", line 109, in inner_run
autoreload.raise_last_exception()
File "/home/colin/software/virtualenvs/barshool/lib/python2.7/site-packages/django/utils/autoreload.py", line 249, in raise_last_exception
six.reraise(*_exception)
File "/home/colin/software/virtualenvs/barshool/lib/python2.7/site-packages/django/utils/autoreload.py", line 226, in wrapper
fn(*args, **kwargs)
File "/home/colin/software/virtualenvs/barshool/lib/python2.7/site-packages/django/__init__.py", line 18, in setup
apps.populate(settings.INSTALLED_APPS)
File "/home/colin/software/virtualenvs/barshool/lib/python2.7/site-packages/django/apps/registry.py", line 85, in populate
app_config = AppConfig.create(entry)
File "/home/colin/software/virtualenvs/barshool/lib/python2.7/site-packages/django/apps/config.py", line 90, in create
module = import_module(entry)
File "/usr/lib64/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
File "/home/colin/software/virtualenvs/barshool/lib/python2.7/site-packages/transmeta/__init__.py", line 7, in <module>
from django.utils.datastructures import SortedDict
ImportError: cannot import name SortedDict

我使用相同的需求文件设置virtualenv。

可能导致此问题的版本之间有什么区别?

2 个答案:

答案 0 :(得分:9)

SortedDictremoved in Django 1.9。确保在新虚拟环境中安装了与旧版本相同的Django版本。

如果是您自己的代码使用SortedDict,那么长期修复就是更新代码以使用collections.OrderedDict,这是在Python 2.7中添加的。在您的情况下,看起来导入错误来自第三方应用程序,您必须更新或替换它以使代码与Django 1.9一起使用。

答案 1 :(得分:2)

这似乎是一个永久性错误。使用django==1.11.1djangorestframework==3.9.1时,意味着相同的问题。特别是djangorestframework(drf)正在导入sortedDict,因此我改为更新了drf。目前的最新版本是djangorestframework==3.10.3 from the python foundation。此drf升级解决了我的挑战。

注意:我正在python 3.6.8上与Ubuntu 18.04.3 LTS一起工作(以防万一,您需要这些细节)