Python3导入ydlidar报dynamic module does not define module export function错误如何解决
问题根因
你遇到的ImportError: dynamic module does not define module export function (PyInit__ydlidar)报错,是因为当前安装的ydlidar SDK的swig绑定模块是针对Python2编译生成的,Python3加载C扩展动态库时需要的初始化入口不存在,因此无法正常导入。
解决步骤
- 卸载已安装的错误版本ydlidar包
pip3 uninstall ydlidar -y # 如果之前用Python2安装过该包,也可以一并清理避免冲突 pip uninstall ydlidar -y
- 安装编译所需的系统依赖
sudo apt update sudo apt install swig python3-dev cmake build-essential -y
- 重新编译SDK并指定Python3版本
进入你本地存放YDLidar-SDK源码的目录,依次执行以下命令:
mkdir build && cd build # cmake时指定Python3解释器路径,确保绑定针对Python3生成 cmake .. -DPYTHON_EXECUTABLE=/usr/bin/python3 make -j4 # 安装编译好的Python3版本包 cd ../python python3 setup.py install --user
- 验证安装结果
切换到非SDK源码的任意目录,执行以下命令,无报错且输出版本号即为安装成功:
python3 -c "import ydlidar; print(ydlidar.__version__)"
注意事项
- 如果你使用了Python虚拟环境,需要将cmake步骤中的
/usr/bin/python3替换为你虚拟环境内的python3可执行文件路径 - 不要在SDK源码目录下测试导入,否则会优先读取目录内适配Python2的ydlidar.py文件,导致重复报错
内容的提问来源于stack exchange,提问作者Ceolando
相关产品推荐
相关产品推荐

