WindowsError: [Ошибка 126] Указанный модуль не найден - PullRequest
24 голосов
/ 21 декабря 2009

Я загружаю DLL в Python, используя следующий код:

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

Но я постоянно получаю следующую ошибку

WindowsError: [Ошибка 126] Указанный модуль не найден

dll присутствует в указанном пути, но я не понимаю, почему я получаю ошибку.

Ответы [ 8 ]

23 голосов
/ 25 августа 2014

Обратите внимание, что даже если DLL находится на вашем пути. Если эта DLL зависит от других DLL, которые НЕ находятся на вашем пути, вы можете получить ту же ошибку. Windows не может найти зависимость в этом случае. Windows не очень хорошо говорит вам, что она не может найти, только что она не нашла что-то. Это зависит от вас, чтобы понять это. Путь поиска Windows DLL можно найти здесь: http://msdn.microsoft.com/en-us/library/7d83bc18.aspx

В моем случае, убедившись, что все необходимые библиотеки находятся в одном каталоге, и выполнение os.chdir () для этого каталога решило проблему.

15 голосов
/ 22 мая 2011

Когда я вижу подобные вещи - обычно это происходит из-за обратного слеша на пути, который преобразуется.

Например, следующее не будет выполнено, потому что \ t в строке преобразуется в символ табуляции.

>>> 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 решения (если это проблема)

а) Используйте двойные косые черты ...

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

б) использовать косую черту

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

в) использовать строки в формате RAW (предваряя строку с помощью r

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

Хотя этот третий работает - у меня время от времени создается впечатление, что он не считается «правильным», потому что строки RAW предназначались для регулярных выражений. Я использовал его для путей в Windows в Python в течение многих лет без проблем :))

1 голос
/ 16 сентября 2017

Я встречался с той же проблемой в 32-битной ОС Win10. Я решил проблему, изменив библиотеку DLL с отладочной на выпускную версию.

Я думаю, это потому, что отладочная версия DLL зависит от других DLL, а версия выпуска - нет.

0 голосов
/ 06 июня 2018

для меня установить Microsoft Visual C ++ 2015 распространяемое обновление 3 из https://www.microsoft.com/en-us/download/details.aspx?id=53587 решено.

0 голосов
/ 07 мая 2018

Пытался указать путь к DLL по-разному (предложено @markm), но у меня ничего не получилось. Исправлена ​​проблема путем копирования DLL в папку скрипта. Это не очень хорошее решение, но оно подходит для моих целей.

0 голосов
/ 27 марта 2018

В Windows это возможно. Вам нужно будет установить: распространяемый Visual C ++ для Visual Studio 2015. У меня была та же проблема, и я установил обе версии (Windows x86 и Windows x64). По-видимому, оба необходимы, чтобы это работало.

0 голосов
/ 07 марта 2013

Также возможно, что вы забыли установить рабочий каталог в eclipse как правильный локальный для запуска приложения.

0 голосов
/ 22 декабря 2009

Проверьте ваше имя DLL .. оно не должно содержать заглавных букв .. для успешной компиляции он должен содержать все строчные буквы

...