首先,虽然现在这个问题解决了,但笨妞其实还是迷糊的。
原本在python上用openslide是很顺畅的,刚顺利跑完一个导入openslide的程序,然后帮同事看一个nii文件显示的问题,于是在自己的电脑上查找nii显示的方法。操作的步骤是这样的:
1. 安装了nibabel库,用pip装的,装好后,nii文件可以载入,并可以用pyplot按slice读出来,并显示。
2. 继续跑了一次我的WSI数据处理,opensilde依然顺利运行。
3. 同事想看整个nii图像,于是安装vtk,做nii三维。vtk安装时同时安装了libtiff等多个依赖库。
4. nii的三维图做出来了。
5. 继续弄自己的WSI数据处理,跑不动了,报如下错误:
Traceback (most recent call last):
File "E:/python_projects/image_dealing/openslide_test.py", line 1, in
import openslide
File "D:\Anaconda3\lib\site-packages\openslide\__init__.py", line 29, in
from openslide import lowlevel
File "D:\Anaconda3\lib\site-packages\openslide\lowlevel.py", line 43, in
_lib = cdll.LoadLibrary('libopenslide-0.dll')
File "D:\Anaconda3\lib\ctypes\__init__.py", line 426, in LoadLibrary
return self._dlltype(name)
File "D:\Anaconda3\lib\ctypes\__init__.py", line 348, in __init__
self._handle = _dlopen(self._name, mode)
OSError: [WinError 127] 找不到指定的程序。
6. 通过命令行导入openslide,系统报错:
前后只隔10分钟左右,于是怀疑中间安装vtk影响了环境变量,但环境变量对的,各种dll文件也都在。但是,而且环境变量中并没有增加vtk及相关库的路径。
在openslide的lowlevel.py文件中加入环境变量,如下:
os.environ['PATH'] = "openslide-bin-path" + ";" + os.environ['PATH'] #openslide-bin-path为openslide的bin文件夹绝对路径。
再运行,居然可以了。
看来,确实是多个路径包含openslide需要加载的dll文件。但是,安装的vtk全部库中,并没有报错的那两个dll文件。真能怀疑,可能更底层的dll冲突了。
总的来说,如果再发生原本导入正常的库突然不能导入了,首先看相关的dll是否还在,环境变量是否被修改,如果都正常,那极有可能是多个文件包含导入该库需要的dll,这时候就在导入dll的py文件下加环境变量,环境变量为库绝对路径。