rpy2.rinterface.RRuntimeError: Ошибка: сбой .onLoad в loadNamespace () для 'hdf5r' - PullRequest
0 голосов
/ 02 января 2019

Я написал python скрипт (python 3.6), который использует rpy2.R версия 3.5.1.Когда я запускаю importr('Seurat'), он выдает мне ошибку:

/ Users / kipnislab / anaconda3 / envs / rmain / lib / python3.6 / site-packages / rpy2 / rinterface / init .py: 146: RRuntimeWarning: Ошибка: не удалось загрузить пакет или пространство имен для «Seurat»: .onLoad не удалось выполнить в loadNamespace () для «hdf5r», подробности: call: fun (libname, pkgname) ошибка: ошибка при получении текущегообработчик ошибок

Из которого я вижу, что importr('Seurat') необходимо импортировать hdf5r, и это не удается.Я работаю в виртуальной среде conda.Запуск R и запуск library('Seurat') работает просто отлично.Если я просто открываю spyder и запускаю importr('Seurat'), он также работает нормально, но при работе в терминале: python seurat_clustering.py происходит сбой с указанной выше ошибкой.Я установил hdf5r, используя conda, а также внутри R, но это не помогло.Если я запускаю importr('hdf5r') в spyder, это дает интересное предупреждение, которое может быть важно здесь (хотя не ошибка, поэтому он загружается на самом деле нормально):

/ Users / kipnislab / anaconda3 / envs /rmain / lib / python3.6 / site-packages / rpy2 / rinterface / init .py: 146: RRuntimeWarning: Ошибка: база данных с отложенной загрузкой '/ Users / kipnislab / anaconda3 / envs / rmain / lib /R / library / hdf5r / R / hdf5r.rdb 'поврежден

Обновление

Вопрос все еще не решен, но я нашел проблему здесь.Следующие операции импорта, выполняемые один за другим, вызывают проблему:

import hdf5
from rpy2.robjects.packages import importr
seuratLib = importr('Seurat')

Итак, один файл импортирует hdf5, чтобы открыть файлы и загрузить правильные данные, но тогда я не могу импортировать Seurat, потому чтотого, что.Я предполагаю, что должен быть способ выгрузки hdf5 перед импортом Seurat.

1 Ответ

0 голосов
/ 05 февраля 2019

В конечном итоге я исправил проблему, изменив порядок импорта: сначала импортируйте все связанные с rpy2 пакеты, затем Seurat и только затем h5py (в отдельном файле, который выполняет поиск данных).

from rpy2.robjects.packages import importr
seuratLib = importr('Seurat')
import nice_service as ns

Внутри nice_service у меня было import hdf5

...