(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.youkuaiyun.com/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的报错,那里也许也有思路。
博客作者在Python3.9环境下遇到导入open3d包时的DLL加载失败问题。通过使用Dependencies工具分析,发现不是DLL缺失,而是版本不匹配。作者发现open3dwin3264b目录下的pyd文件对应的是Python3.5、3.6和2.7版本。为解决此问题,作者删除了64b目录下的pyd文件,并将cpu目录下的pyd文件重命名为适配Python3.9的版本,同时修改了init.py文件中的路径引用。经过这些步骤,成功解决了导入错误,使得open3d包能够正常运行。
2535





