python-pcl安装ImportError: DLL load failed解决办法解决方案
python-pcl安装请参考系列文章:python-pcl安装教程
文章目录
从源码编译后报错
使用源码编译python-pcl请参考系列文章:python-pcl安装教程
从源码编译后,输入import pcl
出现错误:
Python37\lib\site-packages\python_pcl-0.3-py3.7-win-amd64.egg\pcl_*init*_.py", line 5, in
from ._pcl import *
ImportError: DLL load failed
分析
这是因为conda的环境变量path和我们在windows里面设的环境变量不一致,在当前conda环境中输入echo %path%,查看当前conda环境中的环境变量:
echo %path%
发现conda中的环境变量只有我们设置的PATH中的前面一部分(也有可能是我软件装的太多了,PATH比较长)
解决方法
- 可以把PCL相关的DLL几个路径上移到最前面
这样就可以顺利import了!
测试:
# -*- coding: utf-8 -*-
from __future__ import print_function
import numpy as np
import pcl
import pcl.pcl_visualization
def main():
cloud = pcl.load('examples/pcldata/tutorials/table_scene_lms400.pcd')
# Centred the data
centred = cloud - np.mean(cloud, 0)
# print(centred)
ptcloud_centred = pcl.PointCloud()
ptcloud_centred.from_array(centred)
visual = pcl.pcl_visualization.CloudViewing()
# PointXYZ
visual.ShowMonochromeCloud(ptcloud_centred, b'cloud')
v = True
while v:
v = not(visual.WasStopped())
if __name__ == "__main__":
# import cProfile
# cProfile.run('main()', sort='time')
main()
效果:
- 复制OpenNi2.dll文件到conda的path里面
在当前conda环境中输入echo %path%,查看当前conda环境中的环境变量:
复制OpenNi2.dll文件到上述conda的path的任意一个路径里面。OpenNi2.dll 一般位于your\path\to\OpenNi2\Redist or或者your\path\to\OpenNi2\Samples\Bin
参考:https://github.com/strawlab/python-pcl/issues/270
conda安装后报错
使用conda安装python-pcl请参考系列文章:python-pcl安装教程
从conda安装后输入import pcl
出现错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "E:\SoftWare\Anaconda3\envs\condaPythonPcl\lib\site-packages\python_pcl-0.3-py3.6-win-amd64.egg\pcl\__init__.py", line 6, in <module>
from ._pcl import *
ImportError: DLL load failed: 找不到指定的程序。
分析
使用Dependency Walker分析了依赖关系,发现缺少vtk8.0的dll文件:
但是在pcl1.8.1的vtk安装文件夹下,并没有发现dll文件。
查了一下pcl1.11.1的vtk安装文件夹下,是有dll文件的,但是是vtk8.2的dll文件
难不成得去编译一遍vtk8.0的源码?
vtk8.0源码下载:https://gitlab.kitware.com/vtk/vtk/-/tree/v8.0.0/
有精力的小伙伴可以去试一下
后记:
后来又发现使用conda安装python-pcl,dll文件在your_env\Library\bin下面,也就是说vtk的dll文件都在。
使用echo %path%
查看当前环境的环境变量,发现该文件夹包含进环境变量了
这就奇怪了,难道是版本问题?
参考:https://github.com/strawlab/python-pcl/issues/155