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

Python WindowsError:[错误126]找不到指定的模块,python,ctypes,Python,Ctypes,我正在使用以下代码加载python中的dll: if os.path.exists(dll_path): my_dll = ctypes.cdll.LoadLibrary(dll_path) 但是我不断地得到以下错误 WindowsError:[Error 126]找不到指定的模块 dll存在于指定的路径中,但我不明白为什么会出现错误。当我看到类似的情况时,通常是因为路径中有反斜杠被转换 例如-以下操作将失败-因为字符串中的\t已转换为制表符 >>> import

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

if os.path.exists(dll_path):
     my_dll = ctypes.cdll.LoadLibrary(dll_path)
但是我不断地得到以下错误

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


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

当我看到类似的情况时,通常是因为路径中有反斜杠被转换

例如-以下操作将失败-因为字符串中的\t已转换为制表符

>>> 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
b) 使用前斜杠

>>> import ctypes
>>> ctypes.windll.LoadLibrary("c:/tools/depends/depends.dll")
c) 使用原始字符串(在字符串前面加上r

>>> import ctypes
>>> ctypes.windll.LoadLibrary(r"c:\tools\depends\depends.dll")

虽然第三种方法有效,但我时常觉得它不“正确”,因为原始字符串是用于正则表达式的。多年来,我一直在用Python在Windows上的路径中使用它,没有任何问题:))

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

请注意,即使DLL位于您的路径中。如果该DLL依赖于不在您路径中的其他DLL,则可能会出现相同的错误。Windows在这种情况下找不到依赖项。Windows并不擅长告诉你它找不到的东西,只是它没有找到一些东西。这要由你来决定。可以在此处找到Windows dll搜索路径:


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

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


我认为这是因为调试版本的DLL依赖于其他DLL,而发布版本则没有。在Windows中,这是可能的。您需要安装VisualStudio 2015的VisualC++。我有同样的问题,我安装了两个版本(Windowsx86和Windowsx64)。显然,这两种方法都是必要的。

试图以不同的方式指定dll路径(由@markm提出),但对我来说没有任何效果。
通过将dll复制到脚本文件夹中修复了该问题。这不是一个好的解决方案,但我的目的是好的。< /P> < P>我安装微软Visual C++ 2015可重分发更新3,从解决它。

< P>如果你使用GCC编译它为Windows,可能是因为找不到相关的库。
如果与GCC链接,则使用-static标志可能会解决此问题。

其他任何人都可能遇到此极其特殊的问题。。
PyTorch中的某些内容会破坏DLL加载。一旦运行导入火炬,任何进一步的DLL加载都将失败。因此,如果您使用PyTorch并加载自己的DLL,那么您必须首先重新排列代码以导入所有DLL。在Python 3.7

< P>确认W/PyrPAR1.5.0。如果您尝试运行与PyTrar相关的库时遇到此错误,则可能需要考虑仅用CPU版本安装PyTr火炬,即如果您的系统中没有NVIDIA GPU。< /P>
与CUDA合作的Pytork在Nvidia安装的系统中工作,但在其他系统中不工作。

目前有一个很有希望的答案

这暗示着

你会发现:

这是一个库加载问题。详情请浏览 github.com/conda/conda/issues/8836您可能有一个损坏的conda 马上您可以从中使用独立的conda repo.anaconda.com/pkgs/misc/conda-execs修复它: standalone-conda.exe更新-p C:\ProgramData\Anaconda3 康达软件包处理你应该得到版本1.6.0,以及问题 你应该走开

因此,这可能只是一个康达问题。重新安装standalone conda可能会修复此错误。请评论任何能证实这一点的人。

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

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

NestedCautions解决方案对我有效

在导入torch和gpytorch之前导入了我的.dll文件,一切都进行得很顺利


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

您能详细说明您试图导入的DLL以及该DLL的功能吗?它本身可能试图加载另一个找不到的DLL。为我解决这个问题的答案是-duplicate?只需提到“os.chdir()”(虽然我不确定这是否是处理问题的正确方法)在尝试了标记答案中提到的选项后帮助了我使用os.chdir()确保包含DLL的目录位于您的路径中。无论哪种方式,Windows都能找到DLLSI,除了MSVC C++之外,没有一个非常简单的DLL,没有其他依赖项。它似乎没有找到与此相关的链接。我知道这是一个旧线程,但我在Python3.6中发现这是可行的。{print(“Adding dll path”,combinedPath)os.environ['path']=';'.join([os.environ['path'],DLLPath])dll=windl.LoadLibrary('D:/projects/trunk/distributed\u processing/my\u custom\u code.dll'))如何得到答案中的行返回?如果路径无效,谓词“os.path.exists(dll\u path)”将返回False!此解决方案不适用于此问题。可能是库本身或其依赖项:请参阅下面@Mark Ucka的答案:。MinGW工具链的更详细链接器选项集:
-static libgcc-Wl,-Bstatic-lstdc++-lpthread-Wl,-Bdynamic
。您不能将此作为问题的答案发布。您好@premvijay,谢谢你的回答。请考虑使用,以格式化和澄清你的答案。
conda install pytorch==1.4.0 torchvision==0.5.0 -c pytorch