ROS Melodic环境Python3导入tf2_ros报错:PyInit__tf2导出函数未定义
解决ROS Melodic中Python3导入tf2_ros的问题
问题原因
ROS Melodic官方仅支持Python2,你安装的tf2_py是基于Python2编译的C扩展模块。Python3加载模块时要求导出函数以PyInit_开头,而Python2编译的模块使用的是init_前缀,两者不兼容,因此触发导入错误。
可行解决方案:从源码编译tf2相关包适配Python3
- 新建并进入Python3专属的ROS工作空间:
mkdir -p ~/py3_ros_ws/src cd ~/py3_ros_ws/src
- 获取tf2核心源码包:从ROS官方仓库克隆
geometry2仓库,切换到适配Melodic的melodic-devel分支。 - 配置编译环境为Python3:
在工作空间根目录执行以下命令,指定Python3作为编译依赖(根据你的实际Python3版本调整路径,比如Python3.8对应python3.8、python3.8m):
cd ~/py3_ros_ws echo "export ROS_PYTHON_VERSION=3" >> ~/.bashrc source ~/.bashrc catkin_make -DPYTHON_EXECUTABLE=/usr/bin/python3 -DPYTHON_INCLUDE_DIR=/usr/include/python3.6m -DPYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.6m.so
- 激活工作空间:
source ~/py3_ros_ws/devel/setup.bash
- 验证:打开Python3终端,执行
import tf2_ros,无报错则说明适配成功。
简易替代方案(功能受限)
若不想编译源码,可尝试使用tf2_ros中无需C扩展的纯Python接口,但仅能满足基础坐标变换需求,复杂功能仍需依赖源码编译方案。
内容的提问来源于stack exchange,提问作者Boran
相关产品推荐
相关产品推荐

