WindowsError:[错误 126] 找不到指定的模块
Posted
技术标签:
【中文标题】WindowsError:[错误 126] 找不到指定的模块【英文标题】:WindowsError: [Error 126] The specified module could not be found 【发布时间】: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 的答案为我解决了 - 重复? 【参考方案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 的回答:***.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
【讨论】:
以上是关于WindowsError:[错误 126] 找不到指定的模块的主要内容,如果未能解决你的问题,请参考以下文章
在 Python 中重命名文件:WindowsError: [错误 2] 系统找不到指定的文件
无法启动 Terminal Services 服务。错误 126: 找不到指定的模块。