web-dev-qa-db-ja.com

WindowsError:[エラー126]指定されたモジュールが見つかりませんでした

私は次のコードを使用してpythonでdllをロードしています:

if os.path.exists(dll_path):
     my_dll = ctypes.cdll.LoadLibrary(dll_path)

しかし、私は継続的に次のエラーを取得しています

WindowsError:[エラー126]指定されたモジュールが見つかりませんでした

dllは指定されたパスにありますが、エラーが発生する理由がわかりませんでした。

27
MA1

私がこのようなものを見るとき-それは通常、変換されるパスにバックスラッシュがあるためです。

たとえば、文字列の\ tがTAB文字に変換されるため、次は失敗します。

>>> import ctypes
>>> ctypes.windll.LoadLibrary("c:\tools\depends\depends.dll")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "c:\tools\python271\lib\ctypes\__init__.py", line 431, in LoadLibrary
    return self._dlltype(name)
  File "c:\tools\python271\lib\ctypes\__init__.py", line 353, in __init__
    self._handle = _dlopen(self._name, mode)
WindowsError: [Error 126] The specified module could not be found

3つの解決策があります(問題がある場合)

a)二重スラッシュを使用...

>>> import ctypes
>>> ctypes.windll.LoadLibrary("c:\\tools\\depends\\depends.dll")

b)スラッシュを使用する

>>> import ctypes
>>> ctypes.windll.LoadLibrary("c:/tools/depends/depends.dll")

c)RAW文字列を使用します(文字列の前にrを付けます)

>>> import ctypes
>>> ctypes.windll.LoadLibrary(r"c:\tools\depends\depends.dll")

この3つ目は機能しますが、RAW文字列は正規表現のためのものであるため、「正しい」とは見なされないという印象を時々受けています。 Python何年も問題なく:))でWindowsのパスに使用してきました

17
markm

DLLがパスにある場合でも。そのDLLがパスにない他のDLLに依存している場合、同じエラーが発生する可能性があります。この場合、Windowsは依存関係を見つけることができませんでした。Windowsは、何が見つからなかったかを伝えるのが得意ではなく、何かを見つけられなかっただけです。それを理解するのはあなた次第です。ここ: http://msdn.Microsoft.com/en-us/library/7d83bc18.aspx

私の場合、必要なすべてのdllが同じディレクトリにあることを確認し、そのディレクトリに対してos.chdir()を実行することで問題が解決しました。

24
Doo Dah

Win10 32ビットOSでも同じ問題に遭遇しました。 DLLをデバッグからリリースバージョンに変更することで問題を解決しました。

デバッグバージョンDLL=は他のDLLに依存しており、リリースバージョンは依存していないためだと思います。

1
haiwuxing

https://www.Microsoft.com/en-us/download/details.aspx?id=53587 からMicrosoft Visual C++ 2015 Redistributable Update 3をインストールしてください。

0
junior_software

Windowsでは可能です。以下をインストールする必要があります:Visual Studio 2015のVisual C++再頒布可能パッケージ。同じ問題が発生し、両方のバージョン(Windows x86およびWindows x64)をインストールしました。どうやらそれを動作させるために両方が必要です。

0
André Silva

さまざまな方法でdllパスを指定しようとしました(@markmによって提案されました)が、私にとっては何もうまくいきませんでした。 DLLをスクリプトフォルダーにコピーすることで問題を修正しました。それは良い解決策ではありませんが、私の目的には問題ありません。

0
Elephant

GCCを使用してWindows用にコンパイルしている場合、依存ライブラリが見つからないためにエラーが発生した可能性があります。

GCCとリンクする場合に-staticフラグを使用すると、それが修正される場合があります。

0
Mark Ucka

また、Eclipseの作業ディレクトリを、アプリケーションを実行するための正しいローカルに設定するのを忘れている可能性もあります。

0
ceorron