ROS运行python脚本报错ImportError: No module named srv

2023-05-16

最近又写了个ROS(robot operating system)包,格式照抄之前的包,结构如下:

haipeng@wang:~/catkin_ws/src$ tree net_man/
net_man/
├── CMakeLists.txt
├── package.xml
├── scripts
│   └── net_man.py
├── src
└── srv
    ├── ConnectWifi.srv
    └── Switch2AP.srv

3 directories, 5 files


其中net_man.py内容如下

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import sys
import roslib
import rospy
from net_man.srv import *

def switch_to_ap(req):
    print 'AP doudou created'
    print 'please connect the AP and visit http://192.168.0.1/ to enter you wifi password'
    return True

def connect_user_wifi(req):
    ssid = req.ssid.decode('utf-8')
    password = req.password
    print 'agent of internet : ' + ssid
    return True

if __name__ == "__main__":
    rospy.init_node('NetMan')

    #init switch to AP mode service
    s1 = rospy.Service('/netman_switch_to_ap', Switch2AP, switch_to_ap)

    #init connect user wifi service
    s2 = rospy.Service('/netman_connect_user_wifi', ConnectWifi, connect_user_wifi)

    rospy.spin()


编译顺利通过,但运行报错

Traceback (most recent call last):
  File "net_man.py", line 6, in <module>
    from net_man.srv import *
  File "/home/haipeng/catkin_ws/src/net_man/scripts/net_man.py", line 6, in <module>
    from net_man.srv import *
ImportError: No module named srv

奇怪!我明明有srv目录啊,而且

devel/lib/python2.7/dist-packages/net_man/srv/__init__.py

文件也存在啊?!


排除过以下错误:

1、检查package.xml和CMakeList.txt文件,没有问题

2、运行被照抄的包,一切OK

3、运行roswtf命令检查ROS环境,发现ros cache db有问题,用rosdep处理OK后,现象依旧

4、尝试在其他包里执行from net_man.srv import *语句,没问题。又尝试在net_man.py里执行导入其他包的srv,也成功。


到这里我不禁怀疑起名称冲突问题了,将net_man.py改成net_man2.py(改之前记得删除.pyc文件,否则你运行net_man2.py时python调用的还是net_man.py!)后,问题消失!


原来python导入一个模块时,会先对模块名按点号分段(xxx.yyy.zzz),每一段都先从当前目录找起,如果最终在目录A找到,则从A的子目录Aa  Ab  Ac等找第二段,找不到则报错,找到则继续,直到最后一段也找到


所以,我的代码里

from net_man.srv import *
当python找第一段net_man时,先从当前目录找起,然后刚好找到了(net_man.py与net_man目录重名!),于是接着找第二段srv,net_man.py里并没有srv,于是出错退出


感悟:

1、如果python的包导入代码能加入回溯功能就好了,比如第二段查找进入死胡同,则在sys.path里查找下一个匹配项,再试,直到第一段的所有适配项都走入死胡同时,再报错

2、其实只要注意将包名、模块名、函数名区分开,就能避免大部分import问题

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROS运行python脚本报错ImportError: No module named srv 的相关文章

  • 中断 Select 以添加另一个要在 Python 中监视的套接字

    我正在 Windows XP 应用程序中使用 TCP 实现点对点 IPC 我正在使用select and socketPython 2 6 6 中的模块 我有三个 TCP 线程 一个读取线程通常会阻塞select 一个通常等待事件的写入线程
  • 如何使用 opencv.omnidir 模块对鱼眼图像进行去扭曲

    我正在尝试使用全向模块 http docs opencv org trunk db dd2 namespacecv 1 1omnidir html用于对鱼眼图像进行扭曲处理Python 我正在尝试适应这一点C 教程 http docs op
  • 跟踪 pypi 依赖项 - 谁在使用我的包

    无论如何 是否可以通过 pip 或 PyPi 来识别哪些项目 在 Pypi 上发布 可能正在使用我的包 也在 PyPi 上发布 我想确定每个包的用户群以及可能尝试积极与他们互动 预先感谢您的任何答案 即使我想做的事情是不可能的 这实际上是不
  • 删除flask中的一对一关系

    我目前正在使用 Flask 开发一个应用程序 并且在删除一对一关系中的项目时遇到了一个大问题 我的模型中有以下结构 class User db Model tablename user user id db Column db String
  • Pandas 日期时间格式

    是否可以用零后缀表示 pd to datetime 似乎零被删除了 print pd to datetime 2000 07 26 14 21 00 00000 format Y m d H M S f 结果是 2000 07 26 14
  • 使用 kivy textinput 的 'input_type' 属性的问题

    您好 我在使用 kivy 的文本输入小部件的 input type 属性时遇到问题 问题是我制作了两个自定义文本输入 其中一个称为 StrText 其中设置了 input type text 然后是第二个文本输入 名为 NumText 其
  • 在Python中连接反斜杠

    我是 python 新手 所以如果这听起来很简单 请原谅我 我想加入一些变量来生成一条路径 像这样 AAAABBBBCCCC 2 2014 04 2014 04 01 csv Id TypeOfMachine year month year
  • 如何将张量流模型部署到azure ml工作台

    我在用Azure ML Workbench执行二元分类 到目前为止 一切正常 我有很好的准确性 我想将模型部署为用于推理的 Web 服务 我真的不知道从哪里开始 azure 提供了这个doc https learn microsoft co
  • datetime.datetime.now() 返回旧值

    我正在通过匹配日期查找 python 中的数据存储条目 我想要的是每天选择 今天 的条目 但由于某种原因 当我将代码上传到 gae 服务器时 它只能工作一天 第二天它仍然返回相同的值 例如当我上传代码并在 07 01 2014 执行它时 它
  • 使用 xlrd 打开 BytesIO (xlsx)

    我正在使用 Django 需要读取上传的 xlsx 文件的工作表和单元格 使用 xlrd 应该可以 但因为文件必须保留在内存中并且可能不会保存到我不知道如何继续的位置 本例中的起点是一个带有上传输入和提交按钮的网页 提交后 文件被捕获req
  • 如何使用 Mysql Python 连接器检索二进制数据?

    如果我在 MySQL 中创建一个包含二进制数据的简单表 CREATE TABLE foo bar binary 4 INSERT INTO foo bar VALUES UNHEX de12 然后尝试使用 MySQL Connector P
  • 如何通过 TLS 1.2 运行 django runserver

    我正在本地 Mac OS X 机器上测试 Stripe 订单 我正在实现这段代码 stripe api key settings STRIPE SECRET order stripe Order create currency usd em
  • pip 列出活动 virtualenv 中的全局包

    将 pip 从 1 4 x 升级到 1 5 后pip freeze输出我的全局安装 系统 软件包的列表 而不是我的 virtualenv 中安装的软件包的列表 我尝试再次降级到 1 4 但这并不能解决我的问题 这有点类似于这个问题 http
  • 不同编程语言中的浮点数学

    我知道浮点数学充其量可能是丑陋的 但我想知道是否有人可以解释以下怪癖 在大多数编程语言中 我测试了 0 4 到 0 2 的加法会产生轻微的错误 而 0 4 0 1 0 1 则不会产生错误 两者计算不平等的原因是什么 在各自的编程语言中可以采
  • 使用特定颜色和抖动在箱形图上绘制数据点

    我有一个plotly graph objects Box图 我显示了箱形 图中的所有点 我需要根据数据的属性为标记着色 如下所示 我还想抖动这些点 下面未显示 Using Box我可以绘制点并抖动它们 但我不认为我可以给它们着色 fig a
  • 如何断言 Unittest 上的可迭代对象不为空?

    向服务提交查询后 我会收到一本字典或一个列表 我想确保它不为空 我使用Python 2 7 我很惊讶没有任何assertEmpty方法为unittest TestCase类实例 现有的替代方案看起来并不正确 self assertTrue
  • 将 Python 中的日期与日期时间进行比较

    所以我有一个日期列表 datetime date 2013 7 9 datetime date 2013 7 12 datetime date 2013 7 15 datetime date 2013 7 18 datetime date
  • 如何应用一个函数 n 次? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 假设我有一个函数 它接受一个参数并返回相同类型的结果 def increment x return x 1 如何制作高阶函数repeat可以
  • 更改 Tk 标签小部件中单个单词的颜色

    我想更改 Tkinter 标签小部件中单个单词的字体颜色 我知道可以使用文本小部件来实现与我想要完成的类似的事情 例如使单词 YELLOW 显示为黄色 self text tag config tag yel fg clr yellow s
  • Kivy - 单击按钮时编辑标签

    我希望 Button1 在单击时编辑标签 etykietka 但我不知道如何操作 你有什么想法吗 class Zastepstwa App def build self lista WebOps getList layout BoxLayo

随机推荐

  • 查看Jetson系列产品JetPack的版本信息

    想查看 JetPack 的版本信息 xff0c 网上搜了一下都是要查看 etc nv tegra release 也没说该怎么看和什么意思 图片链接 https www jianshu com p 7f2d8a563ded 查了一下 xff
  • docker run 参数详解

    命令格式 xff1a docker run OPTIONS IMAGE COMMAND ARG Usage Run a command in a new container 中文意思为 xff1a 通过run命令创建一个新的容器 xff08
  • Docker安装Minio

    寻找Minio镜像 Docker Hub 查找官方镜像 下载Minio镜像 下载最新版Minio镜像 span class token function docker span pull minio minio 等同于 span class
  • Docker安装Nginx

    寻找Nginx镜像 Docker Hub 查找官方镜像 下载Nginx镜像 下载最新版Nginx镜像 span class token function docker span pull nginx 等同于 span class token
  • Docker安装pgAdmin4

    寻找Redis镜像 Docker Hub 查找官方镜像 下载Redis镜像 下载最新版pgAdmin4镜像 span class token function docker span pull dpage pgadmin4 等同于 span
  • SQLServer跨库查询--分布式查询 用openrowset连接远程SQL或插入数据

    如果只是临时访问 可以直接用openrowset 查询示例 select from openrowset SQLOLEDB sql服务器名 用户名 密码 数据库名 dbo 表名 导入示例 select into 表 from openrow
  • ubuntu20 编译dpdk错误 -Werror=address-of-packed-member

    0x0 在ubuntu20上编译dpdk 18 11报错 xff0c gcc 版本为9 3 0 xff0c 报错如下 xff1a error converting a packed const struct ether addr point
  • Docker安装EMQX

    寻找EMQX镜像 Docker Hub 查找官方镜像 下载EMQX镜像 下载最新版EMQX镜像 span class token function docker span pull emqx emqx 等同于 span class toke
  • Aspose.Cells中文版文档

    Aspose Cells相应操作 1 上传 1 1 Workbook Workbook workBook 61 new Workbook 属性 名称 值类型 说明 Colors Color 获取或设置Excel颜色 ConvertNumer
  • expdp/impdp 详细参数解释

    数据泵导出实用程序提供了一种用于在 Oracle 数据库之间传输 数据对象的机制 该实用程序可以使用以下命令进行调用 示例 expdp scott tiger DIRECTORY 61 dmpdir DUMPFILE 61 scott dm
  • MSDN,我告诉你

    VS MSSQL Windows Windows Server等下载地址均为电骡下载地址 http msdn itellyou cn
  • ASP.NET MVC 4 插件化架构简单实现-思路篇

    用过和做过插件的都会了解插件的好处 xff0c 园子里也有很多和讨论 xff0c 但大都只些简单的加载程序集什么的 xff0c 这里主要讨论的就是使用 ASP NET MVC 4 来实现每个插件都可以完全从主站点剥离出来 xff0c 即使只
  • Quartz.NET 2.0 学习笔记(4) :cron表达式

    Quartz NET 项目地址 http quartznet sourceforge net Quartz NET 2 0 学习笔记 1 xff1a Quartz NET简介 Quartz NET 2 0 学习笔记 2 xff1a 和1 0
  • 修改oracle用户密码永不过期

    1 以在SQL Plus下以DBA身份登陆 用户名 密码 64 服务器SID as sysdba 方法一 xff1a xff08 注意必须用双引号把后面的引上 xff09 C Documents and Settings ssy gt sq
  • Log4Net记录日志到数据库启动24小时后将无法向mysql数据库插入数据

    最近用Log4Net做成服务把日志记录到MySql数据库可是发现可以个奇怪的的问题 xff0c 每过一个晚上Log4Net就不会自动向MySql 数据库记录日志 xff0c 后来经过多方面测试发现 这个问题主要是Mysql会把空闲8小时 x
  • Mysql 密码过期导致无法登陆

    1 停止当前mysql服务 2 mysqld defaults file 61 34 C ProgramData MySQL MySQL Server 5 7 my ini 34 skip grant tables 一定是my ini 我一
  • 上拉电阻 以及 阻抗匹配

    如上图 xff0c 这是UART通信部分原理图 xff0c 先分析一下TX0部分的电路 xff0c 图上TX0是从芯片直接引出来 xff0c 左边四PIN的J7是接到外部设备的插针 xff0c 当TX0输出低电平时 xff0c 由于D2阳极
  • 计算机网络实践

    计算机网络实践 第一章 计算机基本命令 一 网线制作 材料 xff1a 双绞线 xff08 8根线两两绞在一起为减弱电磁干扰 xff09 xff1b 水晶头 xff1b 压线钳双绞线测试仪 制作过程 xff1a 用压线钳将双绞线一端的灰色表
  • 1.FreeRTOS操作系统简介

    1 1 FreeRTOS是什么 xff1f 操作系统 xff08 operation system 简称OS xff09 xff1a 是管理计算机硬件和软件资源的计算机程序 实时操作系统 xff08 Real Time Operating
  • ROS运行python脚本报错ImportError: No module named srv

    最近又写了个ROS xff08 robot operating system xff09 包 xff0c 格式照抄之前的包 xff0c 结构如下 xff1a haipeng 64 wang catkin ws src tree net ma