Openslide-Python导入错误

问题描述

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

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

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

使用Python3.5.3时也会出现同样的问题。有趣的是,我尝试了相同的工作流程,但使用的是32位版本(python2.732位和32位openslide二进制文件),我没有收到这个错误。但是,我更喜欢使用64位版本。

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


解决方案

在GitHub上收到openslide-python作者的帮助后,我能够获得有效的解决方案。

问题是您的搜索路径中有多个DLL与openslide所需的名称相同。例如,在我的例子中,zlib1.dll不仅位于openslidein目录中,还位于matlab目录、gihub目录和Intel wifi目录中。当Python请求操作系统查找所需的DLL时,操作系统将返回它遇到的第一个名称匹配实例,该实例可能不是openslidein实例。

一种快速的解决方法是从openslidein目录内部启动Python。换句话说,启动命令提示符,导航到openslidein目录,输入"python",现在输入import openslide应该可以正常工作。这是可行的,因为首先会搜索启动Python的目录以查找匹配的DLL。一个更严格的解决方案是将以下内容添加到lowLev.py文件(可以在您的python安装的Libsite-Packagesopenslide目录中找到)的开头,这样就不必每次从openslidein内部启动终端

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

注意:将openslide-bin的路径替换为正确的路径

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

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

相关文章