首先,雖然現在這個問題解決了,但笨妞其實還是迷糊的。
原本在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 <module>
import openslide
File "D:\Anaconda3\lib\site-packages\openslide\__init__.py", line 29, in <module>
from openslide import lowlevel
File "D:\Anaconda3\lib\site-packages\openslide\lowlevel.py", line 43, in <module>
_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文件下加環境變量,環境變量爲庫絕對路徑。