ImportError: нет модуля с именем objectid


В настоящее время я django-mongodb-engine 0.4.0 версия установлена на моем Mac OS X 10.6.8 и странно столкнулся с интересной ошибкой при импорте модуля "компилятор":

>> 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 и всех зависимостей, таких как pymongo, djangotoolbox были установлены вместе с ним. Команда 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 11

4 ответа:

Я столкнулся с чем-то подобным, для меня проблемой была эта строка:

from pymongo.objectid import ObjectId

Вызов, кажется, работает в версиях PyMongo

В pymongo 2.2 вызов импорта objectid выглядит так:

from bson.objectid import ObjectId

Похоже, что они уже знают (см. этот запрос на вытягивание ), но никто еще не создал запрос на вытягивание против ветви разработки. Вы можете попробовать исправить это и отправить новый запрос на вытягивание.

Я попытался установить bson с помощью pip напрямую. Удалите и установите pymongo вместо этого, и ошибка больше не появлялась.

Я на Python3 (в 2017 году) и обнаружил, что работает следующее:

from pymongo import MongoClient
from bson import ObjectId