【已解决】conda环境下ROS2 colcon build编译选择特定python解释器
目录
- 1 问题背景
- 2 问题探索
- 3 问题解决
- 4 告别Bug
1 问题背景
环境:
- ROS2 Humble
- Ubuntu22.04
现象:运行
colcon build
后由cpp
编译生成的python
导出库(如自定义消息、服务等),其版本与由python setup.py
安装的python
库版本不一致,导致诸如
rosidl_generator_py.import_type_support_impl.UnsupportedTypeSupport: Could not import 'rosidl_typesupport_c' for package 'msg_lab_py'
等问题
2 问题探索
检查发现,本地存在两个不同版本的python
解释器,分别对应出现问题的版本号3.10
和3.11
,这表明conda
虚拟环境的引入将导致colcon build
进行构建和安装时CMake
使用的python
解释器版本与python setup.py
使用的版本不同。
因此解决问题的核心是使用同一个环境的python
解释器。
首先卸载全局的colcon
编译选项,避免编译过程中错选
sudo apt remove python3-colcon-*
接着创建虚拟环境,原理可看Anaconda安装与Python虚拟环境配置保姆级图文教程(附速查字典)
conda create -n ros2 python=3.10
并切换到虚拟环境
conda activate ros2
创建后如下所示
在该虚拟环境中安装colcon
编译依赖项
pip install -U colcon-common-extensions
以及其他依赖项
pip install catkin_pkg numpy lark setuptools==58.2.0
此时可能还会出现问题
ImportError: /home/winter/anaconda3/envs/ros2/bin/../lib/libstdc++.so.6: version GLIBCXX_3.4.30' not found (required by /opt/ros/humble/local/lib/python3.10/dist-packages/rclpy/_rclpy_pybind11.cpython-310-x86_64-linux-gnu.so)
解决方法是安装gcc
conda install -c conda-forge gcc=12.1.0
至此已经可以成功编译
3 问题解决
总结一下修复的流程:
- 创建虚拟环境
conda create -n ros2 python=3.10
- 切换到虚拟环境
conda activate ros2
- 安装
colcon
构建系统pip install -U colcon-common-extensions
- 安装其他依赖项
pip install catkin_pkg numpy lark setuptools==58.2.0 conda install -c conda-forge gcc=12.1.0
4 告别Bug
本文收录于《告别Bug》专栏,该专栏记录人工智能领域中各类Bug以备复查,文章形式为:问题背景 + 问题探索 + 问题解决,订阅专栏+关注博主后可通过下方名片联系我进入AI技术交流群帮忙解决问题
🔥 更多精彩专栏:
- 《ROS从入门到精通》
- 《Pytorch深度学习实战》
- 《机器学习强基计划》
- 《运动规划实战精讲》
- …
相关文章:

【已解决】conda环境下ROS2 colcon build编译选择特定python解释器
目录 1 问题背景2 问题探索3 问题解决4 告别Bug 1 问题背景 环境: ROS2 HumbleUbuntu22.04 现象:运行colcon build后由cpp编译生成的python导出库(如自定义消息、服务等),其版本与由python setup.py安装的python库版本不一致,导致…...

QT C++实践| 连接数据库的登录界面实现| 附源码
前言 在之前的两篇博客中QT C实战:实现用户登录页面及多个界面跳转、QT C实践|超详细数据库的连接和增删改查操作|附源码分别详细讲解了:登录界面的制作(UI布局、页面跳转、登录逻辑等)、QT如何连接Mysql数据库,并进行…...

html样式排版
<template><div class"box"><div class"header">头部</div><div class"main"><div class"left">菜单</div><div class"right"><div class"right-contentr"&g…...

Java:性能优化细节31-45
Java:性能优化细节31-45 31、合理使用java.util.Vector 在使用java.util.Vector时,需要注意其性能特性和最佳实践,以确保应用程序运行高效。Vector是一个同步的集合类,提供了动态数组的实现。由于它是线程安全的,所以…...

YOLOv9独家原创改进|增加SPD-Conv无卷积步长或池化:用于低分辨率图像和小物体的新 CNN 模块
专栏介绍:YOLOv9改进系列 | 包含深度学习最新创新,主力高效涨点!!! 一、文章摘要 卷积神经网络(CNNs)在计算即使觉任务中如图像分类和目标检测等取得了显著的成功。然而,当图像分辨率较低或物体较小时&…...

Android Gradle开发与应用 (四) : Gradle构建与生命周期
1. 前言 前几篇文章,我们对Gradle中的基本知识,包括Gradle项目结构、Gradle Wrapper、GradleUserHome、Groovy基础语法、Groovy语法概念、Groovy闭包等知识点,这篇文章我们接着来介绍Gradle构建过程中的知识点。 2. Project : Gradle中构建…...

[MRCTF2020]Transform1
a[33]"9,10,15,23,7,24,12,6,1,16,3,17,32,29,11,30,27,22,4,13,19,20,21,2,25,5,31,8,18,26,28,14" b[33]"103,121,123,127,117,43,60,82,83,121,87,94,93,66,123,45,42,102,66,126,76,87,121,65,107,126,101,60,92,69,111,98,77" python代码 a3 [103…...

JavaWeb HTTP 请求头、请求体、响应头、响应体、响应状态码
J2EE(Java 2 Platform Enterprise Edition)是指“Java 2企业版”,B/S模式开发Web应用就是J2EE最核心的功能。 Web是全球广域网,也称为万维网(www),能够通过浏览器访问的网站。 在日常的生活中,经常会使用…...

穿越数字防线:SSH协议的全景解析与未来展望
SSH基本概念 SSH(Secure Shell)是一个用于计算机网络的加密协议,设计用来提供一种安全的方式通过不安全的网络进行远程登录和其他网络服务。SSH协议主要用于远程管理系统和安全地传输信息。 SSH的历史背景 SSH由Tatu Ylnen于1995年开发&am…...

语文教学方法有哪些,产生了什么效果
你是否曾想过,一位普通的语文老师如何化身为智慧的引导者,点燃学生心中的求知之火?让我们一起探寻那些神奇的语文教学方法,以及它们带来的深远影响。 不仅让知识变得容易理解,更在无形中培养了学生的各项能力。通过谈话…...

Docker之网络配置
目录 一. Docker网络介绍 1.1 网络模式 1.2 bridge模式(默认模式) 1.2.1 什么是桥接模式 1.2.2 效果演示 1.2.3 桥接模式的特点 1.3 host模式 1.3.1 什么是host模式 1.3.2 仅主机模式的特点 二. Docker网络实操 2.1 bridge桥接模式 2.1 host仅主机模式 三. Docker自定义网络…...

Mybatis实现分页查询数据(代码实操讲解)
在MyBatis中实现分页查询的常见方式有两种:使用MyBatis内置的分页插件如PageHelper,或者手动编写分页的SQL语句。下面我将为你提供两种方式的示例代码。 使用PageHelper分页插件 首先,确保你的项目中已经添加了PageHelper的依赖。在Maven项…...

【自动驾驶技术系列丛书学习】1.《自动驾驶技术概论》学习笔记
《自动驾驶技术概论》学习笔记 致谢:作者:王建、徐国艳、陈竞凯、冯宗宝 -------------------------------------------------------------------------------------------------------- 笔记目录 《自动驾驶技术概论》学习笔记 1.汽车发展史 2.国…...

2023年全国职业院校技能大赛 GZ073网络系统管理赛项 模块A:网络构建(运维配置)
1.完成整网连通后,进入网络监控运维阶段,运维软件已安装在PC的虚拟机中,通过运维平台监控拓扑中所有网络设备(AP除外)。考试现场提供运维平台登陆的用户名密码信息。 2.通过运维平台将被监控设备纳入监控范围;通过拓扑配置功能,将网络拓扑配置到平台中。...

Linux设备模型(八) - sysfs
一,sysfs目录介绍 sysfs是一个基于内存的虚拟的文件系统,有kernel提供,挂载到/sys目录下,负责以设备树的形式向user space提供直观的设备和驱动信息。 sysfs以不同的视角展示当前系统接入的设备: /sys/block 历史遗…...

C语言实现Linux下的UDP服务端和客户端
程序实现了UDP服务端和客户端,客户端发送消息后等待服务端响应。 udp_server.c: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #include <netinet/ip.h> …...

Excel小技巧 (2) - 如何去除和增加前导0
1. 如何去除前导0 公式:SUBSTITUTE(A2,0,""),然后拖动十字架,同步所有列数据,轻松搞定。 2. 如何补充前导0 公式:TEXT(D2,"0000000") ,0的个数是数字的完整位数。然后拖动十字架&a…...

【GIS人必看】ArcPy脚本如何导入到ArcToolBox中(上)【建议收藏】
经常使用ArcGIS的朋友应该知道,ArcGIS平台可以支持非常丰富的全栈链二次开发,比如ArcPy脚本开发、ArcGIS Engine桌面端开发、ArcGIS AddIn插件开发、WebGIS开发、移动端GIS开发等。当然,这些技术本人全部精通,后面会给大家陆续介绍…...

AI入门笔记(三)
神经网络是如何工作的 神经网络又是如何工作的呢?我们用一个例子来解释。我们看下面这张图片,我们要识别出这些图片都是0并不难,要怎么交给计算机,让计算机和我们得出同样的结果?难点就在于模式识别的答案不标准&…...

Linux搭建SFTP服务器
案例:搭建SFTP服务器 SFTP(SSH文件传输协议) SFTP(SSH文件传输协议)是一种安全的文件传输协议,用于在计算机之间传输文件。它基于SSH(安全外壳协议)的子系统,提供了加密的…...

MobaXterm无法上传整个文件夹,只能上传的单个文件
问题描述: 本来想使用MobaXterm上传.vscode文件夹上传到服务器,但是选择文件夹打开后只能选择文件夹下面的子文件无法上传整个文件。 解决方案: 1、简单暴力 2、压缩后解压...

Android 中get请求网络数据 详细举例
请求链接 https://api.bilibili.com/x/web-interface/ranking 1.添加网络权限 依赖等 implementation com.squareup.okhttp3:okhttp:4.9.3 implementation com.google.code.gson:gson:2.8.92.写请求类network package com.example.myapplication;import android.graphics.Bi…...

每日五道java面试题之mysql数据库篇(六)
目录: 第一题. MySQL中InnoDB引擎的行锁是怎么实现的?第二题. InnoDB存储引擎的锁的算法有三种第三题. 什么是死锁?怎么解决?第四题. 数据库的乐观锁和悲观锁是什么?怎么实现的?第五题. 为什么要使用视图&a…...

Latex——多张图排列
一、方式一(subfig 与 subfloat 配合使用) % Need:\usepackage{subfig} \begin{figure}[htbp] % \setlength{\abovecaptionskip}{0.2cm} % \setlength{\belowcaptionskip}{-0.5cm} \centering\subfloat[MOT15]{\label{fig:a}\includegrap…...

前端复选框问题-节点赋值未选中最后显示时确变成选中状态?
问题: 前两天一同事请教我:前端复选框问题-节点赋值未选中最后显示时确变成选中状态? 还有就是明明传过为的是false,在控制台上打印确变成选中状态,如下图: 以下是前端vue代码: <Scroll h…...

JavaScript命名标识符规范,前端开发面试
前端的现状 提到现状,必须先提到一个概念 大前端。由于近几年互联网的发展,尤其是移动互联网的发展,有的大前端概念将 Native 归入前端的范畴,有的大前端概念将 Node 甚至只渲染页面的 PHP 归入前端范畴,但不管怎么说…...

从零学习Linux操作系统 第三十部分 部署Anisble
一、ansible实验环境的部署 主控机 更改服务器主机名 hostnamectl set-hostname westos_ansible.westos.org 主服务器需要能够实现上网 修改网卡使之能够上网 能ping通 代表可以连接外网 搭载本地软件仓库 并且挂载镜像 装载 dnf install httpd -y 让其开机启动并且…...

C++对象模型剖析(六)一一Data语义学(三)
Data 语义学(三) “继承” 与 Data member 上期的这个继承的模块我们还剩下一个虚拟继承(virtual inheritance)没有讲,现在我们就来看看吧。 虚拟继承(Virtual Inheritance) 虚拟继承本质就是…...

Java 代理模式详解(附案例源代码)
前言 Java代理模式是一种设计模式,在 Java 开发中被广泛应用。它允许我们通过添加一个代理对象来控制对另一个对象的访问,从而提供了一种间接访问实际对象的方法。 代理模式可以分为静态代理和动态代理两种。静态代理是在代码实现阶段就确定了代理…...

七牛云 上传 文件 file is empty
问题 七牛云 上传 文件 file is empty 详细问题 笔者进行Android 开发,使用URI上传文件,上传核心代码 具体报错信息 {ver:8.7.0,ResponseInfo:1709276329412131,status:-6, reqId:, xlog:null, xvia:null, host:null, time:1709276329,error:file is…...