ubuntu20中ros与anaconda的python版本冲突问题

系统环境

原本系统是ubuntu20 + noetic,python都在/usr/bin中,一共是两个版本的python,一个是python3.8,另一个是python2.7。

问题发现

当安装anaconda后,并且将anaconda的bin目录加入到系统环境中时候,发现编译ros程序的时候会报错:

bash 复制代码
CMake Error at /opt/ros/noetic/share/catkin/cmake/empy.cmake:30 (message):
  Unable to find either executable 'empy' or Python module 'em'...  try
  installing the package 'python3-empy'
Call Stack (most recent call first):
  /opt/ros/noetic/share/catkin/cmake/all.cmake:164 (include)
  /opt/ros/noetic/share/catkin/cmake/catkinConfig.cmake:20 (include)
  CMakeLists.txt:58 (find_package)

应该就是跟anaconda的python版本冲突了,因为我下载的anaconda中,python版本是3.11.

解决方法

方法1. 在catkin_make的时候,报错python版本的问题

参考这篇博客

在编译ros程序的时候,需要在catkin_make 的时候,指定ros真正依赖python版本的目录。

bash 复制代码
catkin_make -DPYTHON_EXECUTABLE=/usr/bin/python3

一般情况下是有用的。但是,因为我ros程序需要pcl,而pcl依赖boost库,所以cmake会找到anaconda的boost库,而pcl实际依赖系统的boost库与anaconda的boost库并不一致,所以有的代码会因为boost库的不同,而编译报错,不通过。

方法2. 保存配置conda前的环境路径,在编译的时候把这个环境取出即可。(推荐方法,一劳永逸)

参考github这个方法:https://github.com/pism/pism/issues/356

  1. 打开~/.bashrc文件
bash 复制代码
gedit ~/.bashrc

找到配置anaconda路径的指令,在它之前加一句

bash 复制代码
export NOCONDA_PATH=$PATH

export PATH="/home/xz/anaconda3/bin:$PATH"

这个NOCONDA_PATH就是不包含anaconda库的路径。

  1. 这时候在需要编译的ros目录,打开终端,在编译前激活这个不包含anaconda库的路径。
bash 复制代码
PATH=$NOCONDA_PATH

这时候就可以直接进行编译

bash 复制代码
catkin_make

这时候cmake就直接找到的是系统安装的库,编译通过。

ros-noetic和anaconda联合使用

参考博客:https://blog.csdn.net/qq_44940689/article/details/133813086

anaconda我安装的是当前最新的版本 conda 24.1.2,ubuntu安装noetic

因为上面保存了不包含anaconda库的路径。所以这里我可以直接在conda中,创建一个专门ros用的一个环境。

  1. 创建anaconda环境,noetic是依赖python3.8
bash 复制代码
conda create -n ros-noetic-virtualenv python=3.8
conda activate ros-noetic-virtualenv
  1. 安装ros的相关依赖
bash 复制代码
pip install rospkg rospy catkin_tools empy
  1. 这个时候,就可以在这个anaconda环境中,结合上面保存了不包含anaconda库的路径。就可以很轻松地在anaconda中编译ros的程序,python用的是anaconda的环境,c++的库也是链接原来系统的库!!!

总结

完工,折腾这个anaconda折腾了一下午,终于有方法搞定了。

相关推荐
superrick3 分钟前
MCP 协议深度解析:AI Agent 的工具集成标准
python
小灰灰搞电子10 分钟前
Qt 队列容器 QQueue 的详解与示例
开发语言·qt·qqueue
淼澄研学28 分钟前
Python自动化办公实操:基于pandas与requests的5个提效场景解析
python·自动化·pandas
ACP广源盛1392462567336 分钟前
GSV6155@ACP# Type-C 视频信号转换芯片:技术架构、工程痛点适配与落地场景分析
大数据·c语言·开发语言·人工智能·分布式·嵌入式硬件·架构
程序员-Benothing43 分钟前
Java集合:List实现类深度对比
java·开发语言·后端·面试·list
酷在前行1 小时前
【R论文复刻】Nature Communications 冲积图进阶:状态转移、流带排序与多面板排版(保姆级教程)
开发语言·r语言
薛少杰1 小时前
Python异步系统学习路线第59讲_核心原理与实战案例详解【技巧】
python·事件循环·异步编程·实战案例·协程调度
减瓦1 小时前
用 Git 为本地文件打造一台时光机
开发语言·git·编辑器
一次旅行1 小时前
fzf+ripgrep+fd终端三合一实战:一套检索工具链,大幅提升大型项目开发效率
人工智能·python·github