2025, Oct 31 22:16

Настройка rgee без ошибок: совместимость Python и earthengine-api

Пошаговое решение проблем rgee: сбой ee_Initialize из-за несовместимости Python и earthengine-api. Узнайте, как настроить Python 3.11 и закрепить вер. 0.1.370.

Запуск rgee поначалу выглядит простым — до тех пор, пока посреди настройки не всплывают неочевидные ошибки. Часто затруднение вызывает скрытая несовместимость между rgee, Python‑клиентом Earth Engine (earthengine-api) и версией Python, к которой обращается reticulate. Ниже — краткий разбор точного сценария сбоя и шагов, которые его устранили.

Как воспроизвести проблему

Настройка начинается обычно: устанавливаем rgee, проверяем Python через reticulate, указываем rgee системный интерпретатор Python, затем валидируем окружение. Однако проверка падает, а последующая инициализация выдаёт ошибку учетных данных, которая сохраняется даже после повторной аутентификации.

install.packages("rgee")
library(rgee)

reticulate::py_available()
reticulate::py_discover_config()

# привяжите rgee к системному Python и задайте имя окружения
rgee::ee_install_set_pyenv(py_path = "/usr/bin/python", py_env = "gee_env")

# проверка окружения
rgee::ee_check()

# дополнительные проверки
rgee:::ee_check_python_packages()
rgee:::ee_check_credentials()

# инициализация Earth Engine
acct_email <- "maanan.said@gmail.com"
rgee::ee_Initialize(user = acct_email)

Первый симптом проявляется на этапе проверки окружения с ошибкой вроде “Error in strsplit(a, "[.-]"): non-character argument”. Дальше выясняется, что earthengine-api установлен, но версии 1.5.24, тогда как rgee сообщает, что тестировался с 0.1.370. Учетные данные находятся, однако ee_Initialize завершается сообщением “It looks like your EE credential has expired…”, и повторная аутентификация ничего не меняет.

Что происходит на самом деле

Корневая причина — несовместимость версий между rgee, установленным earthengine-api и Python 3.13. Несоответствие сначала проявляется ошибкой ee_check, а затем — как будто не связанный с ней сбой инициализации, который сохраняется даже после очистки и повторной аутентификации. Выравнивание версий устраняет обе проблемы.

Рабочее решение

Используйте Python 3.11, создайте для rgee изолированное чистое окружение, зафиксируйте earthengine-api на 0.1.370, затем очистите и повторно пройдите аутентификацию.

# установите Python 3.11 и создайте отдельное окружение для rgee
rgee::ee_install_python(py_env = "gee_env", py_version = "3.11")

# явно привяжите rgee к интерпретатору Python 3.11 и новому окружению
rgee::ee_install_set_pyenv(py_path = "/usr/bin/python3.11", py_env = "gee_env")

# зафиксируйте версию earthengine-api, с которой тестировался rgee
reticulate::py_install('earthengine-api==0.1.370', envname = "gee_env")

# сбросьте и заново инициализируйте учетные данные
acct_email <- "maanan.said@gmail.com"
rgee::ee_clean_user_credentials(user = acct_email)
rgee::ee_Initialize(user = acct_email, drive = TRUE, gcs = TRUE)

Почему это важно

rgee связывает R и Python API Earth Engine через reticulate. Когда интерпретатор Python, пакет earthengine-api и rgee не синхронизированы, появляются ошибки валидации на этапе ee_check и последующие сбои ee_Initialize, маскирующиеся под проблемы с учетными данными. Согласование этих компонентов экономит часы проб и ошибок и предотвращает хрупкие конфигурации.

Практические выводы

Настраивая rgee, выделите для него отдельное Python-окружение на базе Python 3.11, зафиксируйте earthengine-api на 0.1.370 (как указывает проверка rgee), затем переинициализируйте учетные данные. Такая последовательность устраняет описанную ошибку проверки и устойчивый сбой инициализации, обеспечивая стабильную работу с Earth Engine из R.

Статья основана на вопросе на StackOverflow от Saïd Maanan и ответе автора Saïd Maanan.