Python读取dll抛出OSError:[WinError 126] [英] Python reading dll throws OSError: [WinError 126]

查看:89
本文介绍了Python读取dll抛出OSError:[WinError 126]的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我显然不是第一个在使用 python 读取 .dll 文件时遇到问题的人.这样的例子可以在那里找到 WindowsError: [Error 126] when loading带有 ctypes 的操作系统​​WindowsError: [错误 126] 找不到指定的模块https://github.com/apache/incubator-mxnet/issues/6313.知道问题的范围后,我检查了我的 dll 的路径是否正确.我什至做了一个小的 python 脚本来最低限度地测试它,添加尽可能多的我能想到的路径:

I am clearly not the first one to have a problem to read a .dll file with python. Such example can be found there WindowsError: [Error 126] when loading a OS with ctypes, WindowsError: [Error 126] The specified module could not be found or https://github.com/apache/incubator-mxnet/issues/6313. Knowing the extend of issues, I checked that the path to my dll is correct. I even did a small python script to minimally test it, adding as much as needed path I could think of:

import sys
import os
from ctypes import *

if __name__ == '__main__':
    print(sys.path)
    sys.path.append(r"C:\Program Files (x86)\OpenBLAS\bin")
    pathWin = os.environ["PATH"]
    pathWin = pathWin.split(";")
    sys.path = sys.path + pathWin
    print(sys.path)
    dllToLoad = "F:/installMxnet/mxnet/build/Debug/libmxnet.dll"
    cdll.libmxnet = cdll.LoadLibrary(dllToLoad)

我仍然以这个错误告终:

I still end up with this error:

Traceback (most recent call last):
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2018.1.1\helpers\pydev\pydevd.py", line 1664, in <module>
    main()
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2018.1.1\helpers\pydev\pydevd.py", line 1658, in main
    globals = debugger.run(setup['file'], None, None, is_module)
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2018.1.1\helpers\pydev\pydevd.py", line 1068, in run
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2018.1.1\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "main.py", line 16, in <module>
    cdll.libmxnet = cdll.LoadLibrary(dllToLoad)
  File "C:\Users\educrocq\AppData\Local\Programs\Python\Python36\lib\ctypes\__init__.py", line 426, in LoadLibrary
    return self._dlltype(name)
  File "C:\Users\educrocq\AppData\Local\Programs\Python\Python36\lib\ctypes\__init__.py", line 348, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: [WinError 126] The specified module could not be found

根据我的阅读,可能是因为 dll 有一个无法找到的依赖项.(而且我猜想找不到它的依赖的依赖会引发同样的问题,等等......).问题似乎来自 Windows,它的输出消息并不详细.

According to what I read, it could be because the dll has a dependency that can't be found. (And I guess that the dependency that would not find its dependency would raise the same problem, and so on...). It seems that the problem comes from Windows which is not verbose on its output message.

但是我需要知道在我的情况下找不到哪个 dll,因为这个 dll 依赖于很多...有没有办法得到哪个 dll 丢失了?

But I need to know which dll can't be found in my situation, because this dll depends on lot of them... Is there a way to get which one is missing?

推荐答案

好的,感谢@eryksun 的反复帮助以及此处解释的 C++ 等效问题的信息,DLL 加载库 - 错误代码 126,我设法找到了哪个 dll 丢失但未加载.sysinternal 工具非常有助于动态了解缺少哪个.我当时犯的一个错误是期望同一文件夹中的每个 dll 都会被加载.实际上,只有在 Windows 路径中才会加载 dll.因此,创建一个包含所有未解决我的问题的 dll 的文件夹.

Alright, thanks to repeated help from @eryksun and information from the C++ equivalent problem explained here, DLL Load Library - Error Code 126, I managed to find which dll was missing but not loaded. The sysinternal tool was a great help to know dynamically which one was missing. And one error I did at the time was to expect that every dll in the same folder would be loaded. In fact, the dll are loaded only when they are in the Windows path. Thus, creating a folder containing all the dll that were not solved my problem.

然而,我深感遗憾的是,错误消息提供的信息无法说明缺少哪个 dll...

However, I deeply regret the lack of information provided by the error message to tell which dll was missing...

这篇关于Python读取dll抛出OSError:[WinError 126]的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆