在Github Actions中运行依赖rospy的测试文件的技术咨询
解决GitHub Actions中rospy导入问题的完整指南
嘿,我来帮你搞定这个问题!首先给你个明确结论:你完全不需要安装完整ROS,只需要rospy模块和必要的依赖就行——毕竟你已经用pytest模拟了node.Publisher,不需要ROS的核心服务(比如roscore、节点通信框架),只要rospy的Python模块能被正常导入就够了。
为什么你之前的安装会失败?
你用sudo apt-get install -y python-rospy报错找不到模块,主要有两个原因:
- Ubuntu 18.04的默认软件源里没有ROS包,必须先添加ROS官方的软件源才能安装rospy;
- 如果你用的是Python 3运行测试,而
python-rospy是对应Python 2.7的包,Python 3自然找不到这个模块。
GitHub Actions中的正确配置步骤
下面是针对Ubuntu 18.04的完整CI配置方案,分Python 2.7和Python 3两种情况:
1. 基础配置(添加ROS源)
不管用哪个Python版本,第一步都要先添加ROS的官方软件源和密钥,否则apt找不到rospy包:
- name: 添加ROS软件源与密钥 run: | sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu bionic main" > /etc/apt/sources.list.d/ros-latest.list' sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
2. 安装对应版本的rospy和pytest
如果你用Python 2.7(Ubuntu 18.04默认版本)
- name: 安装rospy与pytest run: sudo apt-get update && sudo apt-get install -y python-rospy python-pytest
如果你用Python 3
Ubuntu 18.04对应的ROS Melodic版本官方不支持Python 3,但可以安装社区维护的Python 3版本rospy:
- name: 安装Python 3版rospy与pytest run: sudo apt-get update && sudo apt-get install -y python3-rospy python3-pytest
3. 设置ROS环境变量并运行测试
rospy的模块路径是通过ROS的setup.bash脚本添加到Python路径中的,所以运行测试前必须先source这个脚本:
- name: 运行pytest测试 run: | source /opt/ros/melodic/setup.bash pytest
完整的GitHub Actions示例配置
把上面的步骤整合到一个yaml文件里,就是这样:
name: ROS pytest CI on: [push, pull_request] jobs: test: runs-on: ubuntu-18.04 steps: - name: 拉取代码 uses: actions/checkout@v4 - name: 添加ROS软件源与密钥 run: | sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu bionic main" > /etc/apt/sources.list.d/ros-latest.list' sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 - name: 安装rospy与pytest(Python 2.7) run: sudo apt-get update && sudo apt-get install -y python-rospy python-pytest # 如果用Python3,替换上面的安装步骤为: # - name: 安装Python3版rospy与pytest # run: sudo apt-get update && sudo apt-get install -y python3-rospy python3-pytest - name: 运行测试 run: | source /opt/ros/melodic/setup.bash pytest tests/ # 替换成你的测试目录路径
额外提示
- 如果你可以切换测试环境到Ubuntu 20.04,会更顺畅——ROS Noetic版本原生支持Python 3,安装
python3-rospy不会有兼容性问题; - 因为你已经用pytest模拟了Publisher,完全不需要启动
roscore,节省CI时间; - 如果导入还是有问题,可以在运行测试前打印Python的路径确认:
echo $PYTHONPATH,确保ROS的Python模块路径已经被添加进去。
内容的提问来源于stack exchange,提问作者Michael Teguh Laksana
相关产品推荐
相关产品推荐

