ImportError:没有名为objectid的模块

时间:2012-05-14 08:19:01

标签: python django mongodb pymongo django-mongodb-engine

我目前在Mac OS X 10.6.8上安装了django-mongodb-engine 0.4.0版本,并且在导入“编译器”模块时奇怪地遇到了一个有趣的错误:

>> from django_mongodb_engine import compiler

我收到以下错误:

ImportError Traceback (most recent call last)
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django_extensions/management/commands/shell_plus.pyc in <module>()
----> 1 from django_mongodb_engine import compiler

/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django_mongodb_engine/compiler.pyc in <module>()
      15 from pymongo.errors import PyMongoError
      16 from pymongo import ASCENDING, DESCENDING
 ---> 17 from pymongo.objectid import ObjectId, InvalidId
      18 
      19 from djangotoolbox.db.basecompiler import NonrelQuery, NonrelCompiler, \

ImportError: No module named objectid

我通过pip命令安装了软件包,并且已经安装了pymongodjangotoolbox等所有依赖项。我使用的pip命令是:

>> sudo env ARCHFLAGS='-arch i386 -arch x86_64' pip install --upgrade  django-mongodb-engine

相关软件包的当前版本是:

>> pip freeze | grep mongo
django-mongodb-engine==0.4.0
pymongo==2.2

我怀疑django_mongodb_engine包已损坏,因为不再在pymongo中导入ObjectId。相反,它属于bson模块。

您有什么建议来解决这个问题?我应该克隆django-mongodb-engine项目并修复github吗?

4 个答案:

答案 0 :(得分:45)

我遇到了类似的问题,对我来说问题就在这一行:

from pymongo.objectid import ObjectId

该调用似乎适用于PyMongo的版本&lt; 2.2

在pymongo 2.2中,导入objectid的调用是:

from bson.objectid import ObjectId

答案 1 :(得分:2)

看起来他们已经知道了(参见this pull request),但还没有人创建针对开发分支的拉取请求。您可以尝试修复它并提交新的拉取请求。

答案 2 :(得分:1)

我试图直接用pip安装bson。卸载,然后安装pymongo而错误没有重新出现。

答案 3 :(得分:0)

我在使用Python3(2017年)并发现以下工作:

from pymongo import MongoClient
from bson import ObjectId