2017-05-15 36 views
0

私は、Python、端末内部からimport openslideOpenslide-pythonのインポートエラー

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

を実行しているときに私のOSは、Windows 64ビットであると私は、Python 2.7.13(64ビット)を使用しています、次のエラーが表示されます。私はOpenSlideバイナリ(2016-7-17 64ビットリリース)をインストールし、対応するbinフォルダをシステムパスに追加しました。私はpipを使ってpython-openslideをインストールしました。このエラーは、Windowsバイナリがシステムパスに追加されていない場合に発生するWindowsError: [Error 126] The specified module could not be foundsee question)とは異なります。

Python 3.5.3を使用しているときにも同じ問題が発生します。興味深いことに、私は32ビット版(Python 2.7の32ビット版と32ビット版のopenslideバイナリ)以外は同じワークフローを試みましたが、私はこのエラーを受け取りませんでした。しかし、私は64ビットバージョンを使用することをお勧めします。

ご協力いただければ幸いです。ありがとう!

答えて

0

githubのopenslide-pythonの著者の助けを受けて、私は実用的な解決策を得ることができました。

問題は、検索パスにopenslideで必要とされるものと同じ名前の複数のdllがあることです。私の場合、例えば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']

注:正しいパスでパスツーopenslideビンを交換し

あなたがimport openslide lowlevel.pyを入力するたびに、適切なDLLのをロードしようとしている実行されます。上記のコード行は、dllの場所を環境パスの先頭に追加します。これにより、このフォルダが検索階層の最上位にあり、したがって他の名前一致インスタンスの前に検出されます。

githubに関する対応する問題/ユーザーレポートを表示できますhere

関連する問題