WindowsError:[错误126]找不到指定的模块

时间:2009-12-21 14:59:12

标签: python ctypes

我使用以下代码在python中加载一个dll:

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

但我不断收到以下错误

WindowsError:[错误126]找不到指定的模块

dll出现在指定的路径上,但我不明白为什么我会收到错误。

14 个答案:

答案 0 :(得分:23)

请注意,即使DLL在您的路径中。如果该DLL依赖于路径中不存在的其他DLL,则可能会出现相同的错误。在这种情况下,Windows无法找到依赖项。 Windows并不是真的善于告诉你它找不到的东西,只是它找不到东西。由你决定这一点。可以在此处找到Windows dll搜索路径: http://msdn.microsoft.com/en-us/library/7d83bc18.aspx

在我的情况下,确保所有需要的dll都在同一个目录中并对该目录执行os.chdir()解决了这个问题。

答案 1 :(得分:15)

当我看到这样的事情时 - 通常是因为路径中存在反斜杠的反斜杠。

例如 - 以下内容将失败 - 因为字符串中的\ 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字符串是用于正则表达式的。多年来我一直用它在Python上的路径上没有问题:))

答案 2 :(得分:4)

其他任何人都会碰到这个非常具体的问题。 PyTorch内部的某些内容中断了DLL的加载。一旦运行import itertools l = ['cat', 'dog'] duplicate = list(itertools.chain.from_iterable(itertools.repeat(x, 3) for x in l)) ,任何其他DLL加载都将失败。因此,如果您使用PyTorch并加载自己的DLL,则必须重新排列代码以首先导入所有DLL。确认已在Python 3.7上使用PyTorch 1.5.0

答案 3 :(得分:1)

我在Win10 32位操作系统中遇到了同样的问题。我通过将DLL从调试更改为发布版本来解决问题。

我认为这是因为调试版DLL依赖于其他DLL,而版本版本则没有。

答案 4 :(得分:1)

如果您使用GCC在Windows上进行编译,则可能是由于找不到依赖库而导致错误。

如果与GCC链接可能会解决此问题,请使用-static标志。

答案 5 :(得分:0)

此外,您可能忘记将eclipse中的工作目录设置为运行应用程序的正确本地目录。

答案 6 :(得分:0)

在Windows中,它是可能的。您将需要安装:Visual C ++ Redistributable for Visual Studio 2015.我遇到了同样的问题,我安装了两个版本(Windows x86和Windows x64)。显然,两者都是使其发挥作用所必需的。

答案 7 :(得分:0)

尝试以不同的方式指定dll路径(由@markm提出),但没有任何对我有用。 修复了将dll复制到脚本文件夹中的问题。这不是一个好的解决方案,但对我的目的来说还不错。

答案 8 :(得分:0)

为我安装来自https://www.microsoft.com/en-us/download/details.aspx?id=53587的Microsoft Visual C ++ 2015 Redistributable Update 3解决了它。

答案 9 :(得分:0)

如果您在尝试运行与PyTorch相关的库时遇到此错误,则可能必须考虑安装仅具有CPU版本的PyTorch,即您的系统中没有Nvidia GPU。

Pytorch与CUDA一起在Nvidia安装的系统中工作,而在其他系统中则没有。

答案 10 :(得分:0)

Problem updating bokeh: [WinError 126] The specified module could not be found有一个很好的答案。

它提示https://github.com/conda/conda/issues/9313

在那里,您发现:

这是库加载问题。有关更多详细信息,请访问 github.com/conda/conda/issues/8836您可能有一个损坏的conda 马上。您可以使用独立的conda repo.anaconda.com/pkgs/misc/conda-execs进行修复: 独立的conda.exe更新-p C:\ ProgramData \ Anaconda3 conda-package-handling您应该获得版本1.6.0,以及问题 应该消失。

因此,这可能只是一个conda问题。重新安装独立的conda可能会修复该错误。请发表评论,以便任何人确认。

答案 11 :(得分:0)

问题为我解决了。 我将版本从pytorch = 1.5.1更改为pytorch = 1.4,并在anaconda提示窗口中键入了以下命令

conda install pytorch==1.4.0 torchvision==0.5.0 -c pytorch

答案 12 :(得分:0)

NestedCaveats 解决方案对我有用。

在导入torch和gpytorch之前导入我的.dll文件,一切顺利。

所以我只想补充一点,它不仅仅是导入 pytorch,但我可以确认 Torch 和 gpytorch 也有这个问题。我假设它涵盖了任何其他与火炬相关的库。

答案 13 :(得分:-3)

检查你的dll名称..它不能包含任何大写字母.. 它必须具有所有小写字符才能成功编译