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

MA1*_*MA1 28 python ctypes

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

if os.path.exists(dll_path):
     my_dll = ctypes.cdll.LoadLibrary(dll_path)
Run Code Online (Sandbox Code Playgroud)

但我不断收到以下错误

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

dll出现在指定的路径上,但我不明白为什么我收到错误.

Doo*_*Dah 26

请注意,即使DLL在您的路径中.如果该DLL依赖于路径中不存在的其他DLL,则可能会出现相同的错误.在这种情况下,Windows无法找到依赖项.Windows并不是真的善于告诉你它找不到的东西,只是它找不到东西.由你决定这一点.可以在此处找到Windows DLL搜索路径:http: //msdn.microsoft.com/en-us/library/7d83bc18.aspx

在我的情况下,确保所有需要的dll都在同一个目录中,并对该目录执行os.chdir()解决了问题.

  • 只是提到"os.chdir()"(虽然我不确定这是否是处理问题的正确方法)帮助我尝试了标记答案中提到的选项 (3认同)

mar*_*rkm 16

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

例如 - 以下内容将失败 - 因为字符串中的\ 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
Run Code Online (Sandbox Code Playgroud)

有3个解决方案(如果这是问题)

a)使用双斜线......

>>> import ctypes
>>> ctypes.windll.LoadLibrary("c:\\tools\\depends\\depends.dll")
Run Code Online (Sandbox Code Playgroud)

b)使用正斜杠

>>> import ctypes
>>> ctypes.windll.LoadLibrary("c:/tools/depends/depends.dll")
Run Code Online (Sandbox Code Playgroud)

c)使用RAW字符串(用r表示字符串

>>> import ctypes
>>> ctypes.windll.LoadLibrary(r"c:\tools\depends\depends.dll")
Run Code Online (Sandbox Code Playgroud)

虽然这第三个有效 - 但我不时觉得它不被认为是'正确',因为RAW字符串是用于正则表达式的.多年来我一直用它在Python上的路径上没有问题:))

  • 我已经尝试了所有3种解决方案-祝您好运。 (2认同)
  • 如果路径无效 - 谓词“os.path.exists(dll_path)”将返回 False!该解决方案与问题不合适。 (2认同)

小智 6

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