base) a1@1:~/Desktop/N10P$ colcon build Starting >>> lslidar_msgs Starting >>> fishbot_cartographer --- stderr: lslidar_msgs Traceback (most recent call last): File "/opt/ros/jazzy/share/ament_cmake_core/cmake/core/package_xml_2_cmake.py", line 22, in <module> from catkin_pkg.package import parse_package_string ModuleNotFoundError: No module named 'catkin_pkg' CMake Error at /opt/ros/jazzy/share/ament_cmake_core/cmake/core/ament_package_xml.cmake:95 (message): execute_process(/home/a1/miniconda3/bin/python3 /opt/ros/jazzy/share/ament_cmake_core/cmake/core/package_xml_2_cmake.py /home/a1/Desktop/N10P/src/lslidar_msgs/package.xml /home/a1/Desktop/N10P/build/lslidar_msgs/ament_cmake_core/package.cmake) returned error code 1 Call Stack (most recent call first): /opt/ros/jazzy/share/ament_cmake_core/cmake/core/ament_package_xml.cmake:49 (_ament_package_xml) /opt/ros/jazzy/share/ament_lint_auto/cmake/ament_lint_auto_find_test_dependencies.cmake:31 (ament_package_xml) CMakeLists.txt:27 (ament_lint_auto_find_test_dependencies) --- Failed <<< lslidar_msgs [2.83s, exited with code 1] Aborted <<< fishbot_cartographer [7.86s] Summary: 0 packages finished [8.27s] 1 package failed: lslidar_msgs 1 package aborted: fishbot_cartographer 2 packages had stderr output: fishbot_cartographer lslidar_msgs 1 package not processed
时间: 2025-07-28 16:56:36 浏览: 14
<think>我们正在处理一个ROS 2构建错误:ModuleNotFoundError: No module named 'catkin_pkg'
根据引用[3]可知,错误信息为:在运行colcon build时,脚本尝试导入catkin_pkg模块失败。
引用[1]和[2]提到ROS 2的构建工具是colcon,它是ROS 1构建工具(如catkin_make)的迭代升级。但是,尽管ROS 2使用了新的构建系统,某些部分仍然依赖于ROS 1的一些包,比如catkin_pkg。
原因分析:
在ROS 2中,catkin_pkg模块并不是默认安装的,但某些工具(尤其是与构建和包解析相关的)仍然需要它。因此,我们需要手动安装这个Python模块。
解决方案:
1. 安装catkin_pkg:
由于catkin_pkg是一个Python包,我们可以使用pip来安装。请确保使用正确的pip版本(对应系统使用的Python版本,ROS 2 Foxy及以后版本通常使用Python 3)。
对于Ubuntu系统(ROS 2 Foxy、Humble、Iron或Jazzy),执行:
```bash
sudo apt update
sudo apt install python3-catkin-pkg
```
或者使用pip安装(如果系统没有提供对应的deb包,或者需要最新版本):
```bash
pip install catkin_pkg
# 如果系统中有多个Python版本,可能需要使用pip3
pip3 install catkin_pkg
```
注意:如果使用系统包管理器(apt)安装,通常更稳定,因为它是针对当前系统版本编译的。
2. 验证安装:
在终端中运行以下命令,如果没有报错则说明安装成功:
```bash
python3 -c "import catkin_pkg"
```
3. 重新运行colcon build:
```bash
colcon build
```
补充说明:
如果上述方法不能解决问题,可能是环境变量问题,比如多个Python版本冲突。请确保安装catkin_pkg的Python环境是ROS 2使用的环境(通常是/usr/bin/python3对应的环境)。
如果使用虚拟环境,请确保在虚拟环境中安装了catkin_pkg。
对于ROS 2 Jazzy,它是最新的LTS版本(截至2024年),但catkin_pkg的依赖关系应该与之前的版本类似。
引用说明:
引用[3]直接指出了这个错误,因此我们根据该错误信息提供解决方案。
生成相关问题:
1. 如何检查ROS 2工作空间中缺失的依赖项?
2. 在ROS 2中,colcon build常见错误有哪些?
3. ROS 2和ROS 1的构建系统有什么主要区别?
4. 如何为ROS 2工作空间配置Python虚拟环境?
5. 如何升级colcon构建工具?
注意:在回答中,我们引用了用户提供的引用[3],所以我们在相关位置添加了引用标识[^3]。</think>### 解决 ROS 2 Jazzy 中 `colcon build` 的 `ModuleNotFoundError: No module named 'catkin_pkg'` 错误
#### 错误原因分析
1. **核心依赖缺失**:ROS 2 的构建系统仍依赖部分 ROS 1 的 Python 包(如 `catkin_pkg`),但默认未安装[^3]。
2. **版本兼容问题**:Python 环境可能缺少必要的模块或存在版本冲突。
3. **环境配置不完整**:ROS 2 安装后未完全配置依赖关系[^1][^2]。
---
### 分步解决方案
#### 步骤 1:安装缺失的 Python 包
```bash
# 安装 catkin_pkg 和其依赖
sudo apt update
sudo apt install python3-catkin-pkg python3-empy python3-rosdep
```
#### 步骤 2:验证 Python 环境
```bash
# 检查包是否安装成功
python3 -c "import catkin_pkg; print(catkin_pkg.__version__)"
# 预期输出: 1.5.0 或更高版本
```
#### 步骤 3:初始化 ROS 依赖
```bash
# 初始化 rosdep 并更新依赖
sudo rosdep init
rosdep update
```
#### 步骤 4:重新构建工作空间
```bash
# 在 ROS 2 工作空间根目录执行
source /opt/ros/jazzy/setup.bash # 确保环境已激活
colcon build --symlink-install
```
#### 步骤 5:验证修复
```bash
# 检查构建日志
cat log/latest_build/*.log | grep "ModuleNotFoundError"
# 若无错误输出,则修复成功
```
---
### 常见问题排查
1. **多 Python 版本冲突**:
```bash
# 确认使用 Python 3
python --version # 应为 Python 3.x
# 若系统默认是 Python 2,显式指定:
colcon build --symlink-install --event-handlers console_cohesion+ \
--cmake-args -DPYTHON_EXECUTABLE=/usr/bin/python3
```
2. **虚拟环境问题**:
```bash
# 退出所有虚拟环境
deactivate
# 使用系统全局 Python 包
pip3 install catkin_pkg --break-system-packages
```
3. **权限问题修复**:
```bash
# 修复 pip 安装权限
sudo chown -R $USER:$USER ~/.local/
```
---
### 预防措施
```bash
# 安装 ROS 2 时包含开发工具
sudo apt install ros-jazzy-desktop ros-jazzy-ros-base ros-dev-tools
```
> **关键提示**:
> - ROS 2 的 `colcon` 是 `catkin_make` 的迭代升级版,但仍需兼容 ROS 1 的包管理模块[^1][^2]
> - 若使用 Docker,确保基础镜像包含 `python3-catkin-pkg`
> - 定期运行 `rosdep update` 更新依赖关系[^3]
---
### 相关参考文档
- [ROS 2 官方构建文档](https://docs.ros.org/en/jazzy/How-To-Guides/Building-ROS-2-Packages.html)
- [catkin_pkg GitHub 仓库](https://github.com/ros-infrastructure/catkin_pkg)
阅读全文
相关推荐


















