OpenSlide-Python导入错误

use*_*012 3 python python-import python-2.7 openslide

import openslide从python终端内部运行时收到以下错误

<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>
Run Code Online (Sandbox Code Playgroud)

我的操作系统是Windows 64位,我正在使用Python 2.7.13(64位)。我安装了OpenSlide二进制文件(2016-7-17 64位版本),并将相应的bin文件夹添加到了我的系统路径中。然后,我使用pip安装了python-openslide。请注意,此错误与Windows二进制文件尚未添加到系统路径时发生的错误WindowsError: [Error 126] The specified module could not be found请参阅问题)不同。

使用Python 3.5.3时会发生相同的问题。有趣的是,除了32位版本(python 2.7 32位和32位openslide二进制文件)外,我尝试了相同的工作流程,但没有收到此错误。但是,我更喜欢使用64位版本。

任何帮助将不胜感激。谢谢!

use*_*012 6

在github上的openslide-python作者获得帮助后,我可以获得一个可行的解决方案。

问题是您的搜索路径中有多个dll,其名称与openslide所需的名称相同。以我为例,zlib1.dll不仅可以在openslide \ bin目录中找到,而且还可以在MATLAB目录,github目录和Intel wifi目录中找到。当python要求操作系统找到所需的dll时,操作系统将返回它遇到的第一个名称匹配实例,该实例可能不是openslide \ bin一个。

一个快速修复是从openslide \ bin目录内部启动python。换句话说,启动命令提示符,导航到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']

注意:用正确的路径替换path-to-openslide-bin

每次键入import openslidelowlevel.py时,都会尝试加载相应的dll。上面的代码行将dll的位置添加到环境路径的开头,以确保此文件夹位于搜索层次结构的顶部,因此可以在其他名称匹配实例之前找到。

您可以查看GitHub上相应的问题/用户报告在这里