12

我目前在我的 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 包已损坏,因为 ObjectId 不再导入到 pymongo 中。相反,它属于bson模块。

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

4

4 回答 4

51

我遇到了类似的事情,对我来说问题是这一行:

from pymongo.objectid import ObjectId

该调用似乎适用于 PyMongo < 2.2 的版本

在 pymongo 2.2 中,对 import objectid 的调用是:

from bson.objectid import ObjectId
于 2012-06-06T18:04:30.763 回答
3

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

于 2012-05-14T08:35:13.783 回答
2

我尝试直接用 pip 安装 bson。卸载,然后安装 pymongo,错误没有再次出现。

于 2016-11-20T20:25:55.610 回答
0

我在 Python3 上(2017 年),发现以下工作:

from pymongo import MongoClient
from bson import ObjectId
于 2017-07-12T13:58:19.973 回答