(1)问题分析:在python3.9的pip中下载open3d和open3d-python,版本为0.15.1和0.3.0.然后导入open3d包,import open3d as o3d报错:“ImportError: DLL load failed: 找不到指定的模块”。查询一众答案,大概整理出两种思路:1、open3d的版本和python版本不匹配。2、open3d的pyd文件缺少DLL。

首先我使用https://blog.csdn.net/zhangruijerry/article/details/104476725连接中的https://github.com/lucasg/Dependencies这个动态链接库进行依赖分析,我发现我并不缺少DLL文件:

那就剩下一种可能,python的版本和open3d的版本不匹配。

我首先想着避免重装python这么麻烦的事情,我使用的python版本是3.9,而且pybind.cp39-win_amd64.pyd的中间名显示着它确实是使用3.9版本的。而且这个文件不缺少DLL,所以,导入open3d包的时候,可能没有调用这个文件,反而是调用了别的文件。我就在pycharm的报错中找:

我看到调用包得到时候,是用了open3d\win32\64b中的pyd文件,而不是open3d\cpu中的pyd文件:

 

 

报错中显示,调用了open3d.win32.64b.open3d,然后没有找到DLL。我将64b文件下的三个pyd文件都做了依赖分析,发现,这三个pyd文件分别适配与python3.5,python3.6以及python2.7。而我电脑是没有这三个python的DLL文件的。至此找到问题。

(2)解决思路:找不到DLL文件是因为win32的64b中根本没有匹配python3.9的文件,只有3.6和3.5以及2.7的版本。我最先想到的是改文件名以及该动init.py的代码,让代码导入open3d的时候去找之前的pybind.cp39-win_amd64.pyd。如果这个不可行,那就重装一次python3.6,匹配open3d.cp36-win32.pyd。

(3)解决过程:我将open3d\win32\64b中的全部pyd文件都删掉,然后把cpu中的pyd文件移到该处,然后将其中间名cp39-win_amd64删掉。(不删会报错)

 

然后将, 

把win32文件夹下的init.py改成:

 

按照自己的电脑配置改,我是64位,所以改下面那一行。

关掉pycharm,重新打开。然后导入open3d:

运行成功:

 

(4)结语:如果这样也不行,那就重装python到3.6或者3.5版本,重新来一次。就是报错:找不到指定模块,可以按照问题分析中的两种思路找,网上找不到答案就去看一下pycharm的报错,那里也许也有思路。

 

 

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐