Вопрос или проблема
Я пытаюсь использовать библиотеки python firebase admin. Однако, когда я пытаюсь импортировать библиотеку, используя:
from firebase_admin import firestore
Я получаю следующую ошибку:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/mnjuhn/Library/Python/3.8/lib/python/site-packages/firebase_admin/firestore.py", line 27, in <module>
from google.cloud import firestore
File "/Users/mnjuhn/Library/Python/3.8/lib/python/site-packages/google/cloud/firestore/__init__.py", line 18, in <module>
from google.cloud.firestore_v1 import gapic_version as package_version
File "/Users/mnjuhn/Library/Python/3.8/lib/python/site-packages/google/cloud/firestore_v1/__init__.py", line 37, in <module>
from google.cloud.firestore_v1.async_client import AsyncClient
File "/Users/mnjuhn/Library/Python/3.8/lib/python/site-packages/google/cloud/firestore_v1/async_client.py", line 43, in <module>
from google.cloud.firestore_v1.services.firestore import (
File "/Users/mnjuhn/Library/Python/3.8/lib/python/site-packages/google/cloud/firestore_v1/services/firestore/__init__.py", line 16, in <module>
from .client import FirestoreClient
File "/Users/mnjuhn/Library/Python/3.8/lib/python/site-packages/google/cloud/firestore_v1/services/firestore/client.py", line 62, in <module>
from google.cloud.location import locations_pb2 # type: ignore
File "/Users/mnjuhn/Library/Python/3.8/lib/python/site-packages/google/cloud/location/locations_pb2.py", line 30, in <module>
from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/google/api/annotations_pb2.py", line 42, in <module>
google_dot_protobuf_dot_descriptor__pb2.MethodOptions.RegisterExtension(http)
AttributeError: type object 'MethodOptions' has no attribute 'RegisterExtension'
>>>
Моя версия python – 3.8.2, и у меня установлены следующие библиотеки:
ПРЕДУПРЕЖДЕНИЕ: pip вызывается старой оберткой скрипта. Это не сработает в будущей версии pip.
Пожалуйста, смотрите https://github.com/pypa/pip/issues/5599 для получения советов по исправлению основной проблемы.
Чтобы избежать этой проблемы, вы можете вызвать Python с ‘-m pip’ вместо того, чтобы запускать pip напрямую.
------------------------ ----------
CacheControl 0.14.1
cachetools 4.0.0
certifi 2019.11.28
cffi 1.17.1
chardet 3.0.4
cryptography 43.0.3
firebase 4.0.1
firebase-admin 6.6.0
google-api-core 2.22.0
google-api-python-client 1.7.11
google-auth 2.36.0
google-auth-httplib2 0.0.3
google-cloud-core 2.4.1
google-cloud-firestore 2.19.0
google-cloud-storage 2.18.2
google-crc32c 1.5.0
google-resumable-media 2.7.2
googleapis-common-protos 1.65.0
grpcio 1.67.1
grpcio-status 1.67.1
httplib2 0.17.0
idna 2.9
msgpack 1.0.0
pip 24.3.1
proto-plus 1.25.0
protobuf 5.28.3
pyasn1 0.4.8
pyasn1-modules 0.2.8
pycparser 2.22
PyJWT 2.9.0
pytz 2019.3
requests 2.23.0
rsa 4.0
setuptools 41.2.0
six 1.14.0
uritemplate 3.0.1
urllib3 1.25.8
wheel 0.45.0
Ответ или решение
Проблема, с которой вы столкнулись, связана с импортом библиотеки Firebase Admin в Python. Вы получили ошибку AttributeError
, указывающую, что объект MethodOptions
не имеет атрибута RegisterExtension
. Это может быть вызвано несколькими факторами, начиная от совместимости версий библиотек и заканчивая конфигурацией окружения.
А. Исходная информация о проблеме
Вы используете Python версии 3.8.2 и имеете установленные версии нескольких библиотек, включая:
firebase-admin
6.6.0google-cloud-firestore
2.19.0protobuf
5.28.3
Ошибка происходит при импорте модуля firestore
из firebase_admin
, что указывает на проблему с библиотеками, на которые ссылается firebase-admin
.
Б. Версии библиотек и их совместимость
Проанализировав ваши версии библиотек, можно заметить, что некоторые из установленных вами версий могут быть не совместимы друг с другом. Например, версия firebase-admin
6.6.0 является устаревшей, так как слияние этой библиотеки с Firestore и другими компонентами Google Cloud могло привести к несовместимостям с более новыми версиями google-cloud-firestore
и protobuf
.
Чтобы исправить это, рекомендуется обновить библиотеки, с которыми вы работаете. Можно воспользоваться следующими командами для обновления:
pip install --upgrade firebase-admin google-cloud-firestore protobuf
В. Проверка и решение проблемы с pip
Ошибка, которую вы видите в начале (предупреждение о старом скрипт-обертке для pip), может также указывать на потенциальные проблемы с вашим установочным окружением. Чтобы избежать подобных ошибок, лучше использовать команду pip с флагом -m
. Для этого выполните команды:
python -m pip install --upgrade pip
python -m pip install --upgrade firebase-admin google-cloud-firestore protobuf
Г. Проверка зависимостей
После обновления библиотек имеет смысл проверить, какие версии установлены в вашем окружении. Используйте команду:
pip list
Убедитесь, что версии библиотек соответствуют рекомендуемым.
Д. Использование виртуальных окружений
Для лучшей изоляции зависимостей между проектами и минимизации конфликтов рекомендуется использовать виртуальные окружения. Вы можете создать новое окружение с помощью venv
следующим образом:
python -m venv myenv
source myenv/bin/activate # Для macOS/Linux
myenv\Scripts\activate # Для Windows
pip install firebase-admin google-cloud-firestore
Заключение
Следуя приведенным рекомендациям и обновлениям, вы должны устранить ошибку импорта базы данных Firestore из библиотеки Firebase Admin. Если проблема сохраняется, возможно, имеет смысл обратиться к официальной документации Firebase или Google Cloud для получения более подробной информации о совместимости версий и настройках.