ROS rosrun ImportError: cannot import name ‘xxx‘ from ‘xxx‘ 导入自己的模块时出错解决与总结

项目场景:

ROS里面创建包并创建scripts文件夹写包含自己模块的Python功能包


问题描述

写好自己的包编译后rosrun运行时报如下错误:

rosrun xxx xxx.py

Traceback (most recent call last):
  File "/home/xxx/xxx_ws/devel/lib/xxx/xxx.py", line 15, in <module>
    exec(compile(fh.read(), python_script, 'exec'), context)
  File "/home/xxx/xxx_ws/src/xxx/scripts/xxx.py", line 16, in <module>
    from joints import Joint
ImportError: cannot import name 'Joint' from 'joints'

script同级目录存在joints.py这个模块也有Joint这个类,并且都赋予了可执行权限,但rosrun运行的时候就是死活找不到这个模块。


原因分析:

经过大量的资料查阅,最终定位到我的问题是因为Python包重名,也就是模块重名导致Python不知道导哪个包。

按照Autolabor官网,赵老师课程1.3.3 HelloWorld(Python版)创建Python节点时第三步:3.编辑 ros 包下的CMakeLists.txt 文件
其中需要这样的步骤:

catkin_install_python(PROGRAMS scripts/自定义文件名.py
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

原因是因为这句话catkin_install_python会将Python文件复制到devel/lib文件夹里面导致Python导的包重名了,所以Python在ROS下是能直接执行的最好不要install


解决方案:

将devel/lib文件夹里面的Python文件删除,然后不在CMakeLists.txt,写那句话,即注释掉

catkin_install_python(PROGRAMS scripts/自定义文件名.py
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

然后重新catkin_make编译一下,就可以直接运行了。

参考:

[ros+python]无法rosrun 导入自定义.py文件的python可执行文件
ROS——python3包 调用自定义.py文件
解决Python导入自定义模块时ModuleNotFoundError问题
ImportError: cannot import name ‘XXXXX‘ from ‘XX‘解决方案
ImportError :cannot import name xxxxxx 的三种类型的解决方法

拓展:

python ros导入自定义包的问题
ROS中在一个功能包中导入另一个功能包的python模块
Python import: rosrun works well but roslaunch reports error
Using rosrun breaks python3 import

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值