Ошибка импорта Openslide-python

Я получаю следующую ошибку при запуске import openslide изнутри терминала питона

<code>Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\dev_res\python\python2_713\lib\site-packages\openslide\__init__.py", line 29, in <module>
    from openslide import lowlevel
  File "C:\dev_res\python\python2_713\lib\site-packages\openslide\lowlevel.py", line 41, in <module>
    _lib = cdll.LoadLibrary('libopenslide-0.dll')
  File "C:\dev_res\python\python2_713\lib\ctypes\__init__.py", line 440, in LoadLibrary
    return self._dlltype(name)
  File "C:\dev_res\python\python2_713\lib\ctypes\__init__.py", line 362, in __init__
    self._handle = _dlopen(self._name, mode)
WindowsError: [Error 127] The specified procedure could not be found
</code>

Моя ОС Windows 64-битная, и я использую Python 2.7.13 (64-битная). Я установил двоичные файлы OpenSlide (64-разрядная версия 2016-7-17) и добавил соответствующую папку bin в системный путь. Затем я установил python-openslide с помощью pip. Обратите внимание, что эта ошибка отличается от WindowsError: [Error 126] The specified module could not be found ( см. вопрос), который возникает, когда двоичные файлы Windows не были добавлены в системный путь.

Та же проблема возникает при использовании Python 3.5.3. Интересно, что я попробовал тот же рабочий процесс, за исключением 32-разрядных версий (32-разрядные и 32-разрядные двоичные файлы с открытым верхом python 2.7), и я не получил эту ошибку. Однако я бы предпочел использовать 64-битные версии.

Любая помощь будет принята с благодарностью. Спасибо!

1 ответ

Решение

После получения помощи от авторов openslide-python на github я смог получить рабочее решение.

Проблема в том, что в вашем пути поиска есть несколько dll с тем же именем, которое требуется для openslide. В моем случае, например, zlib1.dll находится не только в каталоге openslide\bin, но также в каталоге MATLAB, каталоге github и каталоге Intel wifi. Когда python просит операционную систему найти требуемую dll, операционная система возвращает первый встречающийся экземпляр совпадения имен, который может не являться openlide \ bin.

Быстрое решение - запустить python из каталога openslide\bin. Другими словами, запустите командную строку, перейдите в каталог openslide\bin, введите "python" и наберите import openslide должно работать нормально. Это работает, потому что каталог, из которого был запущен python, сначала ищется на соответствие DLL. Более строгое решение, которое не позволит вам запускать терминал каждый раз из openslide\bin, заключается в добавлении следующего в начало файла lowlevel.py (который находится в каталоге Lib \ site-packages \ openslide вашего каталога. установка Python)

os.environ['PATH'] = "path-to-openslide-bin" + ";" + os.environ['PATH']

Примечание. Замените путь к мусорному ведру открывающегося лотка правильным путем.

Каждый раз, когда вы печатаете import openslide lowlevel.py запускается, который пытается загрузить соответствующие DLL. Приведенная выше строка кода добавляет расположение DLL в начало пути среды, что гарантирует, что эта папка находится в верхней части иерархии поиска и, следовательно, будет найдена перед другими экземплярами, совпадающими с именами.

Вы можете просмотреть соответствующую проблему / отчет пользователя на github здесь

Другие вопросы по тегам