Ошибка при запуске скрипта Python в RStudio и блестящем приложении с использованием ретикуляции

У меня есть сценарий Python, в котором я определил функцию с помощью пакета «adtk». Используя reticulate, я вызываю свою функцию из R и применяю ее к некоторым данным. Это полностью работает без ошибок. Однако когда я пытаюсь сделать то же самое, но в блестящем приложении, я получаю следующую ошибку: модуль adtk не имеет преобразователя атрибутов!

Часть кода RStudio:

library(reticulate)
use_condaenv('my_conda_env')
source_python("my_python_script.py")

Скрипт Python:

import adtk

def my_func():
  adtk.transformer.DoubleRollingAggregate()
  ...


person mary    schedule 19.05.2020    source источник


Ответы (1)


Похоже, запуск вашего кода локально может непреднамеренно использовать ваш системный Python (и его пакет adtk), а не среду conda, в которой может отсутствовать adtk и / или некоторые из его модулей.

Когда вы запустите library(reticulate), пакет reticulate попытается инициализировать наиболее подходящую версию Python, которая может быть не той версией, которую вы собираетесь использовать. Поскольку Python уже инициализирован для вашего сеанса, последующий запуск use_condaenv('my_conda_env'), скорее всего, будет проигнорирован. (Вы можете проверить это, попробовав вместо этого запустить use_condaenv('my_conda_env', required = TRUE), чтобы увидеть, появляется ли ошибка, подобная: The requested version of Python (<conda env python path>) cannot be used, as another version of Python (<system python path>) has already been initialized.)

Чтобы заставить ваш код работать в среде conda, перезапустите сеанс R и запустите reticulate::use_condaenv('my_conda_env', required = TRUE). Убедитесь, что среда используется, запустив reticulate::py_config().

Вы можете дважды проверить, что правильная версия adtk установлена ​​в вашем conda env, выполнив просмотр установленных пакетов. Наконец, убедитесь, что conda поддерживается в системе, в которой вы запускаете приложение Shiny (, например, conda в настоящее время не поддерживается на shinyapps.io, но вместо этого вы можете использовать virtualenv.)

person Rani Powers    schedule 24.05.2020
comment
Спасибо @Rani за ответ. Вы действительно правы. Но я попробовал ваше предложение и по-прежнему получаю ту же ошибку. На самом деле, импорт подпакета transformer и DoubleRollingAggregate в скрипте python как import adtk.transormer.DoubleRollingAggregate работает хорошо! Ошибка была из-за того, что я сделал только import adtk в скрипте python. В последнем случае я добавил import("adtk.transformer") в скрипт приложения на R, и ошибка исчезла. Я думаю, что импорт только adtk не делает его подпакеты доступными в глобальном пространстве имен или в sys.modules! - person mary; 27.05.2020