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折腾了一下午,终于有方法搞定了。

相关推荐
Lucky高11 分钟前
Pandas库入门
python·pandas
小草cys12 分钟前
项目7-七彩天气app任务7.4.2“关于”弹窗
开发语言·前端·javascript
小鸡吃米…22 分钟前
Python PyQt6教程三-菜单与工具栏
开发语言·python
aini_lovee33 分钟前
寻找 MAC 协议的 MATLAB 仿真
开发语言·macos·matlab
Jack电子实验室1 小时前
【杭电HDU】校园网(DeepL/Srun)自动登录教程
python·嵌入式硬件·计算机网络·自动化
木头左1 小时前
二值化近似计算在量化交易策略中降低遗忘门运算复杂度
python
Jelena157795857921 小时前
Java爬虫淘宝拍立淘item_search_img拍接口示例代码
开发语言·python
郝学胜-神的一滴1 小时前
Python数据模型:深入解析及其对Python生态的影响
开发语言·网络·python·程序人生·性能优化
一水鉴天1 小时前
整体设计 定稿 之26 重构和改造现有程序结构 之2 (codebuddy)
开发语言·人工智能·重构·架构
free-elcmacom2 小时前
机器学习进阶<8>PCA主成分分析
人工智能·python·机器学习·pca