You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ROS2自定义包安装后执行ros2 launch报错问题排查

问题根源

你的自定义ROS2包里,带__init__.py的launch文件夹被识别为Python包安装,与ROS2官方的launch核心包重名。Python导入模块时会优先加载你这个自定义的launch包,但它没有官方launch模块中的launch_description_sources子模块,因此运行ros2 launch时触发错误。

原因拆解
  1. 你的setup.py使用了find_packages(exclude=["test"]),该函数会自动将所有包含__init__.py的文件夹识别为Python包,包括同级的launch文件夹。
  2. 编译安装后,这个自定义的launch包会被放到Python的site-packages路径中,导入优先级高于ROS2官方的launch包。
  3. 执行ros2 launch时,Python优先导入你自定义的launch包,找不到所需的子模块,最终抛出KeyError: 'launch'。
修复方法

两种简单方案任选其一:

方案1:删除launch文件夹中的__init__.py

直接删掉launch目录下的__init__.py文件,这样find_packages就不会将其识别为Python包,仅会按照setup.py的配置,把launch文件作为资源文件安装到share/my_package/launch路径下,不会与官方模块冲突。

方案2:在find_packages中排除launch文件夹

修改setup.py中的packages参数,明确排除launch目录:

packages=find_packages(exclude=["test", "launch"]),

这样即使launch文件夹里有__init__.py,也不会被当作Python包安装,仅会被处理成数据文件。

验证步骤

修复后重新编译安装:

colcon build --packages-select my_package
source install/setup.bash

再执行ros2 launch即可正常使用,同时可以通过ros2 launch my_package app_1.launch.py启动自定义launch文件。


内容的提问来源于stack exchange,提问作者bgyooPtr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 23:52:33