【问题标题】:WindowsError: [Error 126] The specified module could not be foundWindowsError:[错误 126] 找不到指定的模块
【发布时间】:2010-12-28 18:35:56
【问题描述】:

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

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

但我不断收到以下错误

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

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

【问题讨论】:

  • 您能否详细说明您尝试导入的 DLL 以及该 DLL 的作用?它本身可能正在尝试加载另一个它找不到的 DLL。
  • this question 的答案为我解决了 - 重复?

标签: python ctypes


【解决方案1】:

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

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

【讨论】:

  • 只是提到“os.chdir()”(虽然我不确定这是否是处理问题的正确方法)在尝试了标记答案中提到的选项后帮助了我
  • 使用 os.chdir() 的替代方法是确保包含 dll 的目录在您的路径中。无论哪种方式,Windows 都可以找到 dll
  • 我有一个非常简单的 dll,除了 MSVC C++ 之外没有其他依赖项。它似乎没有找到指向那个的链接。我该如何解决它
【解决方案2】:

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

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

【讨论】:

  • 我知道这是一个旧线程,但我在 Python 3.6 中发现它有效。 {print("添加 dll 路径",combinedPath) os.environ['PATH'] = ';'.join([os.environ['PATH'], DLLPath]) dll = windll.LoadLibrary('D:/projects /trunk/distributed_processing/my_custom_code.dll')} 你怎么在答案中得到线路返回?????
  • 如果路径无效 - 谓词“os.path.exists(dll_path)”将返回 False!此解决方案不适用于该问题。
  • 可能是库本身或其依赖项:请参阅下面@Mark Ucka 的回答:stackoverflow.com/a/57793866/547270
【解决方案3】:

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

【讨论】:

  • 您不能将此作为问题的答案发布。
【解决方案4】:

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

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

【讨论】:

    【解决方案5】:

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

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

    【讨论】:

    • MinGW 工具链的更详细的链接器选项集:-static-libgcc -Wl,-Bstatic -lstdc++ -lpthread -Wl,-Bdynamic.
    【解决方案6】:

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

    【讨论】:

      【解决方案7】:

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

      【讨论】:

        【解决方案8】:

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

        【讨论】:

          【解决方案9】:

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

          【讨论】:

            【解决方案10】:

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

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

            【讨论】:

              【解决方案11】:

              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 可能会修复该错误。请评论谁可以确认这一点。

              【讨论】:

                【解决方案12】:

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

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

                【讨论】:

                • 嗨@premvijay,谢谢你的回答。请考虑使用mardkdown editing 来格式化和澄清您的答案。
                【解决方案13】:

                NestedCaveats 解决方案对我有用。

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

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

                【讨论】:

                  【解决方案14】:

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

                  安装这个:

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

                  【讨论】:

                    猜你喜欢
                    • 2021-11-23
                    • 2020-08-19
                    • 1970-01-01
                    • 2020-10-22
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2016-06-29
                    相关资源
                    最近更新 更多