获取ImportError:无法导入名称OrderedDict

时间:2017-01-01 17:56:35

标签: python-2.7 kombu

我收到错误

  

ImportError:无法导入名称OrderedDict

在我的ubuntu 14.04机器上本地安装服务器。
我尝试手动安装ordereddict并尝试升级kombu但它仍然给出错误。下面添加完整的追溯 -

  

rishav @ Swastik:〜/ open-event-orga-server $ sudo python create_db.py
  Traceback(最近一次调用最后一次):     文件“create_db.py”,第5行,在中       来自app import current_app
    文件“/home/rishav/open-event-orga-server/app/init.py”,第23行,中
      来自芹菜进口芹菜    
文件“/usr/local/lib/python2.7/dist-packages/celery/init.py”,第133行,in       
从芹菜进口五#noqa     文件“/usr/local/lib/python2.7/dist-packages/celery/five.py”,第153行,中
      来自kombu.utils.compat import OrderedDict#noqa
  ImportError:无法导入名称OrderedDict

3 个答案:

答案 0 :(得分:5)

这解决了我的问题:

  1. 将海带降级为2.5.16。

  2. 重新安装django-celery

  3. 这是log:

    (virtualEnv) D:\Project\staging\modone\settings>pip install django-celery
    Collecting django-celery
      Downloading django_celery-3.2.1-py2-none-any.whl (63kB)
        100% |################################| 71kB 83kB/s
    Collecting django>=1.8 (from django-celery)
      Using cached Django-1.10.5-py2.py3-none-any.whl
    Collecting celery<4.0,>=3.1.15 (from django-celery)
      Downloading celery-3.1.25-py2.py3-none-any.whl (526kB)
        100% |################################| 532kB 122kB/s
    Requirement already satisfied: pytz>dev in d:\project\installations\virtualenv\lib\site-packages (from celery<4.0,>=3.1.15->django-celery)
    Collecting kombu<3.1,>=3.0.37 (from celery<4.0,>=3.1.15->django-celery)
      Using cached kombu-3.0.37-py2.py3-none-any.whl
    Collecting billiard<3.4,>=3.3.0.23 (from celery<4.0,>=3.1.15->django-celery)
      Downloading billiard-3.3.0.23-cp27-none-win32.whl (102kB)
        100% |################################| 102kB 114kB/s
    Requirement already satisfied: anyjson>=0.3.3 in d:\project\installations\virtualenv\lib\site-packages (from kombu<3.1,>=3.0.37->celery<4.0,>=3.1.15->
    django-celery)
    Collecting amqp<2.0,>=1.4.9 (from kombu<3.1,>=3.0.37->celery<4.0,>=3.1.15->django-celery)
      Using cached amqp-1.4.9-py2.py3-none-any.whl
    Installing collected packages: django, amqp, kombu, billiard, celery, django-celery
      Found existing installation: Django 1.4.5
        Uninstalling Django-1.4.5:
          Successfully uninstalled Django-1.4.5
      Found existing installation: amqp 1.0.13
        Uninstalling amqp-1.0.13:
          Successfully uninstalled amqp-1.0.13
      Found existing installation: kombu 2.5.16
        Uninstalling kombu-2.5.16:
          Successfully uninstalled kombu-2.5.16
      Found existing installation: billiard 2.7.3.28
        Uninstalling billiard-2.7.3.28:
          Successfully uninstalled billiard-2.7.3.28
      Found existing installation: celery 3.0.18
        Uninstalling celery-3.0.18:
          Successfully uninstalled celery-3.0.18
    Successfully installed amqp-1.4.9 billiard-3.3.0.23 celery-3.1.25 django-1.10.5 django-celery-3.2.1 kombu-3.0.37
    

答案 1 :(得分:1)

我在kombu 4.0.x的python 2.7.8上遇到了同样的问题,我通过将kombu降级到3.0.x(这是我需要的版本)解决了这个问题。

没有时间调查问题的原因,但this可能有关......

答案 2 :(得分:1)

如果ImportError导入不正确(例如使用orderedDictOrdereddictordereddict),也会发生:

方法1

from collections import OrderedDict

d = {'banana': 3, 'apple': 4, 'pear': 1, 'orange': 2}

# dictionary sorted by key
print(OrderedDict(sorted(d.items(), key=lambda t: t[0])))
print(OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)]))

方法2

import collections

d = {'banana': 3, 'apple': 4, 'pear': 1, 'orange': 2}

# dictionary sorted by key
print(collections.OrderedDict(sorted(d.items(), key=lambda t: t[0])))
print(collections.OrderedDict(
    [('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)]))

输出

OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])
OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])

来源

8.3.5.1. OrderedDict Examples and Recipes