【问题标题】:OSError: [WinError 126] module could not be foundOSError: [WinError 126] 模块找不到
【发布时间】:2019-02-25 16:24:36
【问题描述】:

我正在尝试在 python 中运行MXNet port of SSD,但是当我运行演示时遇到了一个奇怪的错误

OSError: [WinError 126] The specified module could not be found

特别是在尝试打开libmxnet.dll时,所以我在尝试调试时发现。

整个错误信息是这样的:

>>>> kernel32
>>>>  C:\Users\wisdom\Anaconda3\envs\gpu-test\lib\site-packages\mxnet\libmxnet.dll
Traceback (most recent call last):
  File "demo.py", line 2, in <module>
    import tools.find_mxnet
  File "C:\Users\wisdom\Desktop\mxnet-ssd-master\tools\find_mxnet.py", line 6, in <module>
    import mxnet as mx
  File "C:\Users\wisdom\Anaconda3\envs\gpu-test\lib\site-packages\mxnet\__init__.py", line 24, in <module>
    from .context import Context, current_context, cpu, gpu, cpu_pinned
  File "C:\Users\wisdom\Anaconda3\envs\gpu-test\lib\site-packages\mxnet\context.py", line 24, in <module>
    from .base import classproperty, with_metaclass, _MXClassPropertyMetaClass
  File "C:\Users\wisdom\Anaconda3\envs\gpu-test\lib\site-packages\mxnet\base.py", line 213, in <module>
    _LIB = _load_lib()
  File "C:\Users\wisdom\Anaconda3\envs\gpu-test\lib\site-packages\mxnet\base.py", line 204, in _load_lib
    lib = ctypes.CDLL(lib_path[0], ctypes.RTLD_LOCAL)
  File "C:\Users\wisdom\Anaconda3\envs\gpu-test\lib\ctypes\__init__.py", line 353, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: [WinError 126] The specified module could not be found

前两行带有 >>>> 符号表示我尝试调试的行,并检查...\ctypes\__init__.py 文件中错误的触发位置/时间,如下所示

if handle is None:
    x = (self._name)
    print('>>>>',x)
    self._handle = _dlopen(self._name, mode)

我当然检查了请求的文件libmxnet.dll 的存在,它在那里,但是每当它被调用时,它就会抛出这个错误!

【问题讨论】:

  • 看看这个post,也许能帮到你。看看documentation
  • 哦,我忘了提到我试图用 'WinDLL(slef._name, use_last_error=True)' 替换代码,但随后它陷入递归抛出 'RecursionError: 调用时超出最大递归深度Python 对象'!
  • 这很奇怪......你可以发布你的完整代码吗?或者只是你定义self._name 的地方,你的句柄是什么?谢谢
  • 代码可以在here找到,错误通常在第351行抛出。如果我尝试将_dlopen()函数更改为WinDLL()——我认为我不应该这样做——它会陷入递归!我也尝试打开 python 解释器并运行 WinDLL('...\\libmxnet.dll') 函数,但仍然出现相同的错误“找不到模块”
  • 别担心...我已经打开了一个;)

标签: python dll ctypes mxnet


【解决方案1】:

好的,终于解决了!

我知道当文件依赖不满足或找不到时可能会抛出这样的错误。因此,要检查依赖关系,请先转到 Visual Studio Prompt,然后导航到存在 libmxnet.dll 的文件夹并运行以下命令

dumpbin /dependents libmxnet.dll

它会显示所需文件的列表。

在我的情况下缺少一些 nVidia GPU Computing Toolkit 文件 Cuda 9.0 libmxnet.dll 要求它们,而我使用的是工具包版本 10.0!

【讨论】:

  • Visual Studio 提示符是什么以及在哪里?
【解决方案2】:

您应该安装 vcredist_x64 或 vcredist_x86 包代表 Visual C++ Redistributable。

【讨论】:

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