我使用以下代码在python中加载一个dll:
if os.path.exists(dll_path):
my_dll = ctypes.cdll.LoadLibrary(dll_path)
但我不断收到以下错误
WindowsError:[错误126]找不到指定的模块
dll出现在指定的路径上,但我不明白为什么我会收到错误。
答案 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名称..它不能包含任何大写字母.. 它必须具有所有小写字符才能成功编译