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

StackOverflow https://stackoverflow.com/questions/1940578

  •  20-09-2019
  •  | 
  •  

Вопрос

Я загружаю библиотеку dll в python, используя следующий код:

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

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

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

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

Это было полезно?

Решение

Когда я вижу такие вещи, обычно это происходит потому, что в пути есть обратные косые черты, которые преобразуются.

Например, следующее не удастся, потому что в строке преобразуется в символ 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 решения (если это проблема)

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

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

Другие советы

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

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

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

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

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

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

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

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

Если вы используете GCC для компиляции для Windows, возможно, ошибка связана с тем, что не удалось найти зависимые библиотеки.

Использование флага -static при связывании с GCC может это исправить.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top