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

系统环境

原本系统是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.
在这里插入图片描述

解决方法

方法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.xdnf.cn/news/1411894.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【CAP探索者指南】掌握分布式世界的三角平衡术,一致性、可用性、分区容错性大揭秘!

关注微信公众号 “程序员小胖” 每日技术干货,第一时间送达! 引言 在现代的微服务架构中,系统被拆分成了许多小型服务,每个服务可能有自己的数据库。这种架构带来了灵活性和可扩展性,但也引入了新的挑战,…

Spring事件

📝个人主页:五敷有你 🔥系列专栏:Spring⛺️稳中求进,晒太阳 Spring事件 简洁 Spring Event(Application Event)就是一个观察者模式,一个bean处理完任务后希望通知其他Bean的…

AI学习指南-专栏前言

前言 人工智能AI作为当下最火热的技术之一,我们每个人似乎都被动的置身于这场科技变革中,AI越来越多的出现在我们的身边,也总能听到这样的言论,例如“N年后AI会取代某某行业”,AI出现之后,好像大多数人都陷…

MLP手写数字识别(3)-使用tf.data.Dataset模块制作模型输入(tensorflow)

1、tensorflow版本查看 import tensorflow as tfprint(Tensorflow Version:{}.format(tf.__version__)) print(tf.config.list_physical_devices())2、MNIST数据集下载与预处理 (train_images,train_labels),(test_images,test_labels) tf.keras.datasets.mnist.load_data()…

5000元工资46个工作群,DBA避开职场PUA

📢📢📢📣📣📣 作者:IT邦德 中国DBA联盟(ACDU)成员,10余年DBA工作经验, Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主,全网粉丝10万 擅长主流Oracle、My…

三维点云处理-聚类(下)

接着前一部分数据聚类方法的介绍,由于K-means和GMM方法都是基于欧式距离信息处理的,两者分别以圆形和椭圆形来作为数据的聚类分割方式,这种情况下会导致环形图和月牙图数据分割不准确,因此进一步的介绍一种谱聚类方法,…

【实验】根据docker部署nginx并且实现https

环境准备 systemctl stop firewalld setenforce 0 安装docker #安装依赖包 yum -y install yum-utils device-mapper-persistent-data lvm2 #设置阿里云镜像 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #安装最新版…

考研入门55问---基础知识篇

考研入门55问---基础知识篇 01 >什么是研究生入学考试? 研究生是指大专和本科之后的深造课程。以研究生为最高学历, 研究生毕业后,也可称研究生,含义为研究生学历的人。在中国大陆地区,普通民众一般也将硕士毕业生称…

10G MAC层设计系列-(4)MAC TX模块

一、前言 MAC TX模块就是要将IP层传输过来的数据封装前导码、MAC地址、帧类型以及进行CRC校验,并与CRC值一块组成以太网帧。 二、模块设计 首先对输入的数据进行缓存,原因是在之后要进行封装MAC帧头,所以需要控制数据流的流动 FIFO_DATA_6…

SFT430C 用于快速充电协议和QC2.0/3.0的USB专用充电端口控制器芯片IC

一般描述 SFT430C是HiSicon快速充电协议(FCP)和高通快速充电协议控制器“2.0/3.0(质量控制2.0/3.0 )USB接口该设备可对FCP或QC2.0/3.0供电设备(PD)进行快速充电。该协议功能监测USB D/D-数据线电压或D-数据线传输,并自动调整移动电源和墙壁适配器的输出电压&…

【北京仁爱堂】事出有因,原来是“肝”出现问题,才导致了痉挛性斜颈

痉挛性斜颈是肌张力障碍疾病中的一种,局限于颈部肌肉。由于颈部肌肉间断或持续的不自主的收缩,导致头颈部扭曲、歪斜、姿势异常。一般在30~40岁发病。由于痉挛性斜颈病因不明,西医方面药物及手术的临床疗效不甚理想,而…

二.Django项目之电商购物商城 -- 校验用户输入密码是否合法

Django项目之电商购物商城 – 校验用户输入密码是否合法 需要开发文档和前端资料的可私聊 一. 创建用户逻辑操作 1. 创建用户app – users python manage.py startapp users2.注册app users.apps.UsersConfig,3. 创建视图 from django.shortcuts import render from djan…

招了个牛逼的DBA,问题少了一半,老油条慌了...

📢📢📢📣📣📣 作者:IT邦德 中国DBA联盟(ACDU)成员,10余年DBA工作经验, Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主,全网粉丝10万 擅长主流Oracle、My…

题目:德州扑克

问题描述: 解题思路: 因为题目太长就跳过这道题了,其实这题是一个签到题。因为给定了5张牌,并且顺序是递增的,所以我们只需要模拟每种牌型(从大到小去模拟判断)即可。 注意点:因为有…

for循环赋值

在for循环内将i赋值给j的问题 for(int i0,ji1;i<5;i){//此时j只会等于1cout<<"i-"<<i<<" j-"<<j<<endl; }如图&#xff1a; 将j放入循环体后没问题 for(int i0;i<5;i){int j i1; cout<<"i-"<<…

D2-一种将文本转换为图表的现代图表脚本语言

&#x1f310; 开源页面 https://github.com/terrastruct/d2 &#x1f310; 在线体验 https://play.d2lang.com/ 与同类型工具对比 &#x1f4c4;通过简单的描述文本&#xff0c;D2 便会自动生成高质量图表&#xff0c;该脚本语言简单易用&#xff0c;可定制性强&#xff0c;…

【电路笔记】-Twin-T振荡器

Twin-T振荡器 文章目录 Twin-T振荡器1、概述2、Twin-T振荡器3、Twin-T放大4、Twin-T 振荡器示例5、总结Twin-T 振荡器是另一种 RC 振荡器电路,它使用两个并联的 RC 网络来产生单一频率的正弦输出波形。 1、概述 Twin-T 振荡器是另一种类型的 RC 振荡器,它产生正弦波输出,用…

Go实战训练之Web Server 与路由树

Server & 路由树 Server Web 核心 对于一个 Web 框架&#xff0c;至少要提供三个抽象&#xff1a; Server&#xff1a;代表服务器的抽象Context&#xff1a;表示上下文的抽象路由树 Server 从特性上来说&#xff0c;至少要提供三部分功能&#xff1a; 生命周期控制&…

Linux理解文件操作 文件描述符fd 理解重定向 dup2 缓冲区 C语言实现自己的shell

文章目录 前言一、文件相关概念与操作1.1 open()1.2 close()1.3 write()1.4 read()1.4 写入的时候先清空文件内容再写入1.5 追加&#xff08;a && a&#xff09; 二、文件描述符2.1 文件描述符 fd 0 1 2 的理解2.2 FILE结构体&#xff1a;的源代码 三、深入理解文件描述…

npm安装依赖报错解决办法

项目场景&#xff1a; 安装gitee上的开源vue3TS项目&#xff0c;npm安装依赖报错 问题描述 克隆项目到VSCode之后&#xff0c;使用npm install安装依赖&#xff0c;报错 npm install npm ERR! code ENOENT npm ERR! syscall open npm ERR! path Y:\WebStudyBlog\MovieWeb/p…