WindowsError: [Ошибка 126] Не удалось найти указанный модуль
Я загружаю dll в python, используя следующий код:
if os.path.exists(dll_path):
my_dll = ctypes.cdll.LoadLibrary(dll_path)
Но я постоянно получаю следующую ошибку:
WindowsError: [Ошибка 126] Не удалось найти указанный модуль
dll присутствует по указанному пути, но я не понял, почему я получаю ошибку.
Ответы
Ответ 1
Когда я вижу такие вещи, это обычно потому, что на пути, который преобразуется, есть обратные косые черты.
Например - следующее будет сбой - потому что \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")
Пока этот третий работает - время от времени я получаю впечатление, что он не считается "правильным", потому что строки RAW предназначены для регулярных выражений. Я использую его для путей в Windows на Python в течение многих лет без проблем:))
Ответ 2
Обратите внимание, что даже если DLL находится на вашем пути. Если эта DLL опирается на другие DLL, которые НЕ на вашем пути, вы можете получить ту же ошибку. В этом случае Windows не могла найти зависимость. Windows не очень хорошо говорит вам, чего она не может найти, только потому, что она ничего не нашла. Это зависит от вас, чтобы понять это. Путь поиска dll для Windows можно найти здесь:
http://msdn.microsoft.com/en-us/library/7d83bc18.aspx
В моем случае, будучи уверенным, что все необходимые DLL файлы были в одном каталоге, а os.chdir() в этот каталог решили проблему.
Ответ 3
Я столкнулся с той же проблемой в 32-разрядной ОС Windows. Я решил проблему, изменив DLL от debug до версии.
Я думаю, что это связано с тем, что DLL для отладочной версии зависит от другой DLL, а в версии для версии не было.
Ответ 4
Также может случиться так, что вы забыли установить свой рабочий каталог в eclipse в качестве локального локального приложения для запуска.
Ответ 5
В Windows это возможно. Вам нужно будет установить: Visual C++ распространяемый для Visual Studio 2015. У меня была та же проблема, и я установил обе версии (Windows x86 и Windows x64). Очевидно оба необходимы, чтобы это работало.
Ответ 6
Пытался указать путь к DLL по-разному (предложено @markm), но у меня ничего не получилось.
Исправлена проблема путем копирования DLL в папку скрипта. Это не хорошее решение, но хорошо для моих целей.
Ответ 7
для меня установить Microsoft Visual C++ 2015 Распространяемое обновление 3 из https://www.microsoft.com/en-us/download/details.aspx?id=53587 решил.
Ответ 8
Если вы используете GCC для компиляции для Windows, возможно, ошибка связана с тем, что не удается найти зависимые библиотеки.
Использование флага -static, если соединение с GCC может исправить это.
Ответ 9
Проверьте свое имя dll.. оно не должно содержать буквы в верхнем регистре.
он должен иметь все строчные буквы для успешной компиляции