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

embedded/2024/10/18 5:51:01/

系统环境

原本系统是ubuntu20 + noetic,python都在/usr/bin中,一共是两个版本的python,一个是python3.8,另一个是python2.7。
在这里插入图片描述

问题发现

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

CMake Error at /opt/ros/noetic/share/catkin/cmake/empy.cmake:30 (message):Unable to find either executable 'empy' or Python module 'em'...  tryinstalling 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.
在这里插入图片描述

解决方法

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

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

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文件
gedit ~/.bashrc

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

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

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

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

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

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

总结

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


http://www.ppmy.cn/embedded/32985.html

相关文章

使用 Python 和 OpenCV 进行实时目标检测的详解

使用到的模型文件我已经上传了,但是不知道能否通过审核,无法通过审核的话,就只能 靠大家自己发挥实力了,^_^ 目录 简介 代码介绍 代码拆解讲解 1.首先,让我们导入需要用到的库: 2.然后,设…

【netty系列-03】深入理解NIO的基本原理和底层实现(详解)

Netty系列整体栏目 内容链接地址【一】深入理解网络通信基本原理和tcp/ip协议https://zhenghuisheng.blog.csdn.net/article/details/136359640【二】深入理解Socket本质和BIOhttps://zhenghuisheng.blog.csdn.net/article/details/136549478【三】深入理解NIO的基本原理和底层…

springboot 整合 knife4j-openapi3

适用于&#xff1a;项目已使用shiro安全认证框架&#xff0c;整合knife4j-openapi3 1.引入依赖 <!-- knife4j-openapi3 --> <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-spring-boot-starter</artifa…

RabbitMQ之基础入门

在 AMQP 中&#xff0c;Producer 将消息发送到 Exchange &#xff0c;再由 Exchange 将消息路由到一个或多个 Queue 中&#xff08;或者丢弃&#xff09;。Exchange 根据 Routing Key 和 Binding Key 将消息路由到 Queue &#xff0c;目前提供了 Direct、Topic、Fanout、Header…

Typora+Docsify快速入门

Typora是什么&#xff1f; ​ Typora中文版是一款好用极简的跨平台Markdown编辑器&#xff0c;软件使用这款软件能够帮助用户轻松将文本转换到HTML&#xff0c;软件从底层向上设计&#xff0c;软件支持markdown的标准语法&#xff0c;同时这款软件还支持动态预览功能&#xff…

vCLS 和 FSVM代理虚拟机的默认用户名和密码。

vCLS 代理虚拟机由 vSphere 集群服务自动生成并用于维护集群服务的运行状况。默认情况下&#xff0c;当集群内主机大于等于三台时&#xff0c;vCLS 虚拟机为三个&#xff0c;若集群内主机数小于三台时&#xff0c;vCLS 虚拟机等于主机的数量。这些代理虚拟机由 vSphere ESX Age…

nginx配置tcp长连接实现集群

注意&#xff1a;实际工程应该会用docker部署。 安装nginx sudo apt install libpcre3-dev zlib1g openssl -y wget https://nginx.org/download/nginx-1.26.0.tar.gz #安装到/home/gyl/workspace/mprpc/vendor/nginx-1.26.0下 tar xfzv nginx-1.26.0.tar.gz && cd n…

Python进阶之-ast使用详解

✨前言&#xff1a; &#x1f31f;什么是ast? ast模块在Python中用于将源码转换成抽象语法树&#xff08;Abstract Syntax Trees&#xff0c;AST&#xff09;。通过AST&#xff0c;我们可以读取、修改、分析Python代码。本质上&#xff0c;它将源码转化为树形结构&#xff0…