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

通过paramiko SSHClient执行Python文件时遇rospy模块导入错误

解决Paramiko执行Python脚本时找不到rospy的问题

这个问题我之前也碰到过!本质原因是paramiko的exec_command默认启动的是非交互式shell,不会自动加载你平时终端里的那些环境变量——比如ROS的setup脚本,而rospy依赖的正是这些环境变量才能被Python找到。而你直接在终端执行时,终端是交互式shell,会自动加载~/.bashrc或者/opt/ros/<版本>/setup.bash里的配置,所以能正常找到rospy。

下面给你几个靠谱的解决办法:

  • 显式加载ROS环境变量后执行脚本
    在exec_command里先source ROS的setup文件,再运行Python脚本。比如你的ROS版本是noetic的话,命令可以写成这样:

    stdin, stdout, stderr = ssh.exec_command('source /opt/ros/noetic/setup.bash && python path/to/file.py')
    

    注意把noetic换成你实际使用的ROS版本(比如melodic、humble)。

  • 使用ROS环境下的Python解释器路径
    直接指定ROS安装目录里的Python解释器来运行脚本,这样它会自动识别rospy的位置:

    # 以noetic为例,Python3的路径
    stdin, stdout, stderr = ssh.exec_command('/opt/ros/noetic/bin/python3 path/to/file.py')
    
  • 让shell加载用户的完整环境
    用bash -lc命令来强制加载交互式shell的环境配置(会读取~/.bashrc),这样就能和你手动在终端执行的环境一致了:

    stdin, stdout, stderr = ssh.exec_command('bash -lc "python path/to/file.py"')
    

    这里要注意引号的转义,或者用单引号包裹命令。

  • 检查脚本的shebang行
    如果你的Python脚本开头有#!/usr/bin/env python,可以改成指向ROS环境里的Python路径,比如:

    #!/opt/ros/noetic/bin/python3
    

    这样即使直接执行脚本,也会用正确的Python解释器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:20:59