pyopencl导入错误

时间:2017-11-07 15:38:56

标签: python dll opencl pyopencl

我在Windows 10上通过Anaconda运行python 3.5.4,使用来自conda-forge的pyopencl 2017.2,通过Anaconda安装。我的系统是i5 4670K,带有R9 290运行驱动程序版本 17.11.1使用OpenCL版本 23.20.788.0。

尝试导入pyopencl模块时遇到以下错误

    >>> import pyopencl as cl
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "[my home folder]\Anaconda3\lib\site-packages\pyopencl\__init__.py", line 37, in <module>
    import pyopencl.cffi_cl as _cl
  File "[my home folder]\Anaconda3\lib\site-packages\pyopencl\cffi_cl.py", line 39, in <module>
    from pyopencl._cffi import ffi as _ffi
ImportError: DLL load failed: The specified module could not be found.

加载_cffi.pyd时似乎发生错误。此错误与先前主题中显示的问题有相似之处:

Python pyopencl Import Error

cffi load failure when trying to import PyOpenCL

pyopencl import error cffi.so undefined symbol

然而,尽管安装完成(貌似)没有错误,我安装了AMD和Intel的OCL SDK:问题仍然存在。我还更新了我的grahics卡驱动程序。

我尝试使用Dependency Walker检查_cffi.pyd的依赖关系,如以下主题中所述:

Python pyopencl DLL load failed even with latest drivers

这确实在opencl.dll下出现了许多循环依赖项和缺少依赖项,名称以API-MS-WINEXT-MS-WIN开头。重新命名opencl.dll中的/System32并使用\Anaconda3\Library\bin中的WITH et AS (SELECT XMLType ( '<patent> <applications> <application code="U7"> <applicationId> <number>351149</number> </applicationId> </application> <application> <applicationId> <number>54632</number> </applicationId> </application> <application code="A2"> <applicationId> <number>DM090884</number> </applicationId> </application> </applications> </patent> ' ) xt from dual ) SELECT ext.* FROM et, XMLTABLE('/patent' passing et.xt Columns APPLICATION_NUMBER VARCHAR (14) PATH 'applications/application[(@code="A2" or @code="U2" )][1]/applicationId/number' --PATH ' applications/application[1]/applicationId/number' ) ext 时依赖性错误仍然存​​在。

进行一些搜索我找到了这个帖子:

Dependency Walker: missing dlls

基本上说缺少的依赖项无需担心。

2 个答案:

答案 0 :(得分:1)

我也遇到了这个问题,我的研究使我找到了帮助安装兼容版本的文档:https://media.readthedocs.org/pdf/mot/master/mot.pdf

错误是因为您没有适用于AMD或Intel的pyopencl和opencl驱动程序的兼容版本。

报价:

  

安装预编译的二进制车轮(.whl)是最简单的方法   安装PyOpenCL,但仅在为您的车轮进行了编译时才有效   特定的Python实现。在Christoph Gohlke网站上   (http://www.lfd.uci.edu/~gohlke/pythonlibs/#pyopencl),您可以找到一个   PyOpenCL二进制软件包的范围。如果有兼容的   您的系统,下载该版本。您可以查看是否兼容   二进制名称中的Python版本和OpenCl版本与   已安装的Python和驱动程序支持的版本。注意很多   驱动程序(例如nVIDIA)仅支持OpenCL 1.2,因此在这种情况下   拿起车轮名称中的“ + cl12”,而不是例如“ + cl21”。对于   例如,如果您拥有带有Python 3.5和GPU的64位Windows系统   或CPU驱动程序支持OpenCL 1.2,则需要使用   名称中的“ + cl12”,win-amd64和cp35m(请注意格式,   cp m,m很重要)。 (要检查您使用的是哪个Python版本   您可以在命令行中运行python --version吗?

这应该对您有帮助

答案 1 :(得分:0)

我的Intel HD Graphics 4400 GPU遇到相同的问题。它以前曾奏效(我不记得确切地如何使它更早地起作用)。在某个时候,我得到了与Asker所述完全相同的pyopencl导入错误。

经过一番尝试后,我从此处https://software.intel.com/en-us/articles/opencl-drivers安装了Intel OpenCL驱动程序。在安装过程中,它表明我的常规Intel HD 4400驱动程序需要首先卸载,安装工具为我完成了该操作。然后安装了OpenCL驱动程序,我可以在我的GPU上再次使用OpenCL。 我的理论:可能是在Windows更新过程中,我的安装程序被破坏了,有时还会更新设备驱动程序。