从 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 二进制文件(2016-7-17 64 位版本)并将相应的 bin 文件夹添加到我的系统路径中。然后我使用 pip 安装了 python-openslide。请注意,此错误与
WindowsError: [Error 126] The specified module could not be found
( see question ) 不同,后者在 Windows 二进制文件尚未添加到系统路径时发生。使用 Python 3.5.3 时也会出现同样的问题。有趣的是,除了 32 位版本(python 2.7 32 位和 32 位 openslide 二进制文件)之外,我尝试了相同的工作流程,但没有收到此错误。但是,我更喜欢使用 64 位版本。
任何帮助将不胜感激。谢谢!
最佳答案
在 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 openslide
时都会运行 lowlevel.py,它会尝试加载适当的 dll。上面的代码行将 dll 的位置添加到环境路径的开头,以确保此文件夹位于搜索层次结构的顶部,因此会在其他名称匹配实例之前找到。
可以在 github here 上查看对应的 issue/user 报告
关于python - Openslide-python 导入错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43987081/