繁体   English   中英

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

[英]WindowsError: [Error 126] The specified module could not be found

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

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

但我不断收到以下错误

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

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

请注意,即使 DLL 在您的路径中。 如果该 DLL 依赖于不在您的路径中的其他 DLL,您可能会遇到相同的错误。 在这种情况下,Windows 找不到依赖项。 Windows 并不擅长告诉您它找不到什么,只是告诉您它没有找到什么。 由你来解决这个问题。 Windows dll 搜索路径可以在这里找到: http : //msdn.microsoft.com/en-us/library/7d83bc18.aspx

就我而言,确保所有需要的 dll 都在同一目录中,然后对该目录执行 os.chdir() 解决了问题。

当我看到这样的事情时 - 通常是因为路径中有反斜杠被转换。

例如 - 以下将失败 - 因为字符串中的 \\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 中 Windows 上的路径,没有问题:))

万一其他人遇到这个非常具体的问题.. PyTorch 内部的某些东西会破坏 DLL 加载。 一旦您运行import torch ,任何进一步的 DLL 加载都将失败。 因此,如果您使用 PyTorch 并加载自己的 DLL,则必须重新排列代码以首先导入所有 DLL。 在 Python 3.7 上使用 PyTorch 1.5.0 确认

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

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

如果您使用 GCC 为 Windows 编译它,则错误可能是因为找不到依赖库。

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

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

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

试图以不同的方式指定 dll 路径(由@markm 提出),但对我来说没有任何效果。 通过将 dll 复制到脚本文件夹来解决此问题。 这不是一个好的解决方案,但可以满足我的目的。

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

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

带有 CUDA 的 Pytorch 在 Nvidia 安装的系统中工作,但在其他系统中不起作用。

Problem updates bokeh: [WinError 126] The specified module could not be found 上有一个有希望的答案。

它暗示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 可能会修复错误。 请评论谁能证实这一点。

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

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

NestedCaveats 解决方案对我有用。

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

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

这可能是因为在您的系统上找不到其中一个 DLL 的运行时依赖项。 我认为您的系统缺少预期的 Microsoft Visual C 运行时 DLL。

安装这个:

https://www.microsoft.com/en-US/download/details.aspx?id=40784

我通过为 Visual Studio 2012 和最新的 Visual Studio 版本安装 VC redistributable 解决了这个问题。 重新启动后,问题消失了。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM