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.mzph.cn/bicheng/6507.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Stable Diffusion webUI 配置指南

Stable Diffusion webUI 配置指南 本博客主要介绍部署Stable Diffusion到本地,生成想要的风格图片。 文章目录 Stable Diffusion webUI 配置指南1、配置环境(1)pip环境[可选](2)conda环境[可选] 2、配置Stable Diffu…

Monorepo(单体仓库)与MultiRepo(多仓库): Monorepo 单体仓库开发策略与实践指南

🌟 引言 在软件开发的浩瀚宇宙里,选择合适的代码管理方式是构建高效开发环境的关键一步。今天,我们将深入探讨两大策略——Monorepo(单体仓库)与MultiRepo(多仓库),并通过使用现代化…

CMakeLists.txt语法规则:部分常用命令说明一

一. 简介 前一篇文章简单介绍了CMakeLists.txt 简单的语法。文章如下: CMakeLists.txt 简单的语法介绍-CSDN博客 接下来对 CMakeLists.txt语法规则进行具体的学习。本文具体学习 CMakeLists.txt语法规则中常用的命令。 二. CMakeLists.txt语法规则:…

【Qt问题】VS2019 Qt win32项目如何添加x64编译方式

解决办法: 注意改为x64版本以后,要记得在项目属性里,修改Qt Settings、对应的链接include、lib等 参考文章 VS2019 Qt win32项目如何添加x64编译方式_vs2019没有x64-CSDN博客 有用的知识又增加了~

Spring事件

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

OpenCV人脸识别C++代码实现Demo

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,它提供了很多函数,这些函数非常高效地实现了计算机视觉算法。 官网:https://opencv.org/ Github: https://github.com/opencv/opencv Gitcode…

微博一级评论爬虫

cookies需要替换成自己的 import requests import requests from lxml import etree import openpyxl from concurrent.futures.thread import ThreadPoolExecutor import re from datetime import datetime, timedelta from urllib import parse from jsonpath import jsonpa…

查找算法与排序算法

查找算法 二分查找 (要求熟练) // C// 二分查找法(递归实现) int binarySearch(int *nums, int target, int left, int right) // left代表左边界,right代表右边界 {if (left > right) return -1; // 如果左边大于右边,那么…

初始化Linux或者Mac下Docker运行环境

文章目录 1 Mac下安装Docker2 Linux下安装Docker2.1 确定Linux版本2.2 安装Docker2.3 配置加速镜像 3 Docker安装校验4 安装docker-compose4.1 直接下载二进制文件4.2 移动二进制文件到系统路径4.3 设置可执行权限4.4 验证安装 1 Mac下安装Docker mac 安装 docker 还是比较方便…

open3d 处理las点云数据

laspy读取las点云数据 转换格式 open3d 处理:法向量估计 分享给有需要的人,代码质量勿喷。 import numpy as np import os import math import laspy import open3d as o3d# 输入文件夹路径 dirInput = "F://data"# 要筛选的文件后缀 extension = ".las&q…

配置Zephyr编译环境

安装chocolatey 以管理员身份运行PowerShell,然后在PowerShell下执行以下命令,安装chocolatey。 Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol [System.Net.ServicePointManager]::Securi…

自然科学领域基于ChatGPT大模型的科研绘图

以ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Diffusion、星火大模型、文心一言、千问为代表AI大语言模型带来了新一波人工智能浪潮,可以面向科研选题、思维导图、数据清洗、统计分析、高级编程、代码调试、算法学习、论文检索、写作、翻译、润色、文献辅助…

【深度学习实战(32)】模型结构之解耦头(de-coupled head)与耦合头(coupled head)

一、传统耦合头局限性 传统的检测模型,如YOLOv3和YOLOv4,使用的是单一的检测头,它同时预测目标类别和框的位置。然而,这种设计存在一些问题。首先,将类别预测和位置预测合并在一个头中,可能导致一个任务的…

机器学习小tip

有监督学习 有监督学习是通过现有训练数据集进行建模,再用模型对新的数据样本进行分类或者回归分析的机器学习 方法。 无监督学习 而无监督学习,或者说非监督式学习,则是在没有训练数据集的情况下,对没有标 签的数据进行分析并…

Wireshark CLI | 过滤包含特定字符串的流

问题背景 源自于和朋友的一次技术讨论,关于 Wireshark 如何查找特定字符串所在的 TCP 流,原始问题如下: 仔细琢磨了下,基于我对 Wireshark 的使用经验,感觉一步到位实现比较困难,所以想着说用 Wireshark C…

Mybatis Interview Question Summary

1. In best practice, usually an Xml mapping file will write a Dao interface corresponding to it. What is the working principle of the Dao interface? Can the methods in the Dao interface be overloaded when the parameters are different? Answer: The Dao in…

旅游系列之:庐山美景

旅游系列之:庐山美景 一、路线二、住宿二、庐山美景 一、路线 庐山北门乘坐大巴上山,住在上山的酒店东线大巴游览三叠泉,不需要乘坐缆车,步行上下三叠泉即可,线路很短 二、住宿 长江宾馆庐山分部 二、庐山美景

Photoshop中图像编辑的基本操作

Photoshop中图像编辑的基本操作 Photoshop中调整图像窗口大小Photoshop中辅助工具的使用网格的使用标尺的使用注释工具的使用 Photoshop中置入嵌入式对象Photoshop中图像与画布的调整画布大小的修改画布的旋转图像尺寸的修改 Photoshop中撤销与还原采用快捷键进行撤销与还原采用…

机器学习之基于Jupyter多种混合模型的糖尿病预测

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 随着现代生活方式的改变,糖尿病的患病率在全球范围内呈现上升趋势。糖尿病是一种慢性代谢…

上位机图像处理和嵌入式模块部署(树莓派4b使用lua)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 lua是一个脚本语言,比c语言开发容易,也没有python那么重,整体使用还是非常方便的。一般当成胶水语言进行开发&a…