2017-05-15 2 views
0

ich folgende Fehlermeldung erhalten, wenn import openslide von innen Python TerminalOpenslide-Python-Importfehler

<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> 

Mein OS ist Windows 64-Bit und ich bin mit Python 2.7.13 (64-Bit). Ich habe die OpenSlide-Binaries installiert (Release 2016-7-17 64-bit) und den entsprechenden bin-Ordner zu meinem Systempfad hinzugefügt. Ich habe dann python-openslide mit pip installiert. Beachten Sie, dass sich dieser Fehler von WindowsError: [Error 126] The specified module could not be found (see question) unterscheidet, der auftritt, wenn die Windows-Binärdateien dem Systempfad nicht hinzugefügt worden sind.

Das gleiche Problem tritt auf, wenn Sie Python 3.5.3 verwenden. Interessanterweise habe ich denselben Arbeitsablauf mit Ausnahme der 32-Bit-Versionen (python 2.7 32-bit und 32-bit openslide-Binärdateien) versucht und diesen Fehler nicht erhalten. Allerdings würde ich lieber die 64-Bit-Versionen verwenden.

Jede Hilfe würde sehr geschätzt werden. Vielen Dank!

Antwort

0

Nachdem ich die Hilfe von den openslide-python-Autoren auf github erhalten hatte, konnte ich eine funktionierende Lösung bekommen.

Das Problem ist, dass mehrere DLLs in Ihrem Suchpfad mit dem gleichen Namen wie die von openslide erforderlich sind. In meinem Fall zum Beispiel zlib1.dll ist nicht nur im Verzeichnis openslide \ bin, sondern auch in einem MATLAB-Verzeichnis, Github-Verzeichnis und einem Intel WiFi-Verzeichnis gefunden. Wenn Python das Betriebssystem anfordert, die erforderliche DLL zu finden, gibt das Betriebssystem die erste übereinstimmende Instanz zurück, auf die es trifft, die möglicherweise nicht die Datei openslide \ bin ist.

Eine schnelle Lösung besteht darin, Python aus dem Verzeichnis openslide \ bin zu starten. Mit anderen Worten, starten Sie eine Eingabeaufforderung, navigieren Sie zum Verzeichnis openslide \ bin, geben Sie "python" ein und jetzt sollte import openslide funktionieren. Dies funktioniert, weil das Verzeichnis, von dem aus Python gestartet wurde, zuerst nach übereinstimmenden DLLs durchsucht wird. Eine rigorosere Lösung, die verhindert, dass Sie das Terminal jedes Mal innerhalb von openslide \ bin starten müssen, fügen Sie am Anfang der Datei lowlevel.py folgende Datei hinzu (zu finden im Verzeichnis Lib \ site-packages \ openslide) Ihre python-Installation)

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

Hinweis: Ersetzen Sie Pfad-zu-openslide-ist mit dem richtigen Pfad

Jedes Mal, wenn import openslide lowlevel.py ausgeführt geben, die die entsprechenden dLL zu laden versucht. Die obige Codezeile fügt den Pfad der DLLs zum Anfang des Umgebungspfads hinzu, wodurch sichergestellt wird, dass dieser Ordner an der Spitze der Suchhierarchie steht und daher vor den anderen mit Namen übereinstimmenden Instanzen gefunden wird.

Sie können das entsprechende Problem/Benutzerbericht auf Github here

anzeigen