我正在使用以下代码在Python中加载一个dll:
if os.path.exists(dll_path):
my_dll = ctypes.cdll.LoadLibrary(dll_path)
但我不断地遇到以下错误:
WindowsError:[错误 126] 找不到指定的模块
虽然 DLL 文件位于指定路径,但我不明白为什么会出现这个错误。
我正在使用以下代码在Python中加载一个dll:
if os.path.exists(dll_path):
my_dll = ctypes.cdll.LoadLibrary(dll_path)
但我不断地遇到以下错误:
WindowsError:[错误 126] 找不到指定的模块
虽然 DLL 文件位于指定路径,但我不明白为什么会出现这个错误。
>>> 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
如果这是问题,有三种解决方案:
a) 使用双斜杠...
>>> import ctypes
>>> ctypes.windll.LoadLibrary("c:\\tools\\depends\\depends.dll")
使用正斜杠
>>> import ctypes
>>> ctypes.windll.LoadLibrary("c:/tools/depends/depends.dll")
c) 使用原始字符串(在字符串前加上 r)
>>> import ctypes
>>> ctypes.windll.LoadLibrary(r"c:\tools\depends\depends.dll")
虽然第三种方法可以使用 - 但我时不时地会有这样的印象,即它不被认为是“正确”的,因为RAW字符串是为正则表达式而设计的。我在Python中多年来一直将其用于Windows上的路径而没有问题 :)
万一其他人也遇到这个极端特定的问题..
PyTorch内部某些内容会破坏DLL加载。一旦你运行import torch
,任何后续的DLL加载都将失败。因此,如果你正在使用PyTorch并加载自己的DLL,你需要重新调整代码,先导入所有的DLL。在Python 3.7上确认过 PyTorch 1.5.0存在该问题。
如果你使用GCC在Windows上进行编译,可能会因为找不到依赖库而导致错误。
使用GCC链接时加上-static标志可能会修复这个问题。
-static-libgcc -Wl,-Bstatic -lstdc++ -lpthread -Wl,-Bdynamic
。 - scrutari我在32位的Win10操作系统中遇到了同样的问题。通过将DLL从调试版本更改为发布版本,我解决了这个问题。
我认为这是因为调试版本的DLL依赖于其他DLL,而发布版本则没有。
这可能是因为您的系统缺少某个DLL的运行时依赖项。我认为您的系统缺少了预期的Microsoft Visual C运行时DLL。
请安装此程序:
https://www.microsoft.com/en-US/download/details.aspx?id=40784
在更新bokeh时出现问题:[WinError 126]指定的模块无法找到中有一个很有前途的答案。
它提示了https://github.com/conda/conda/issues/9313。
在那里,你会发现:
这是一个库加载问题。更多细节请参见 github.com/conda/conda/issues/8836 您可能现在已经有一个损坏的conda。 您可以使用来自repo.anaconda.com/pkgs/misc/conda-execs的独立conda进行修复: standalone-conda.exe update -p C:\ProgramData\Anaconda3 conda-package-handling 您应该获得版本1.6.0,并且问题 应该消失了。
因此,这可能只是一个conda问题。重新安装独立的conda可能会修复错误。请评论者确认此事。