ros 部署python包 以及找不到路径 no module

简单总结一下:python的py文件在ros中不能直接运行,所以需要编译为可执行文件,才能通过rosrun或者roslaunch执行,同时在该执行文件开头需要注明解释器(和编码规则)

而该可执行文件需要导入其他python模块时,通过解释器在搜索路径中读取,可直接读取py文件,一个python模块应该以包的形式规范编写

可执行文件和需要导入的包/文件:

        若在同一目录,理论上搜索路径为同一层及,可不用添加setup.py

        若不在同一目录,则需要用setup.py去声明python包。

如果依然找不到路径,说明可能搜索路径没有加入可执行文件的路径,需要在脚本中增加路径 sys.path.insert 或者在环境变量中添加 export PYTHONPATH=

首先,应该按照python包层级规范编写

python 包层级关系

ros编译规则:在功能包的根目录下添加setup.py文件,用于编译已有的python包

以在devel空间可以运行python包,或在功能包的bin目录下运行脚本可以找到src目录下的python包

from distutils.core import setup
from catkin_pkg.python_setup import generate_distutils_setup
 
d = generate_distutils_setup(
    packages=['mypkg'],
    scripts=['scripts/myscript'],
    package_dir={'': 'src'}
)
 
setup(**d)

以及在CMakelists.txt文件添加可执行文件

install(PROGRAMS bin/hello
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})
#可执行文为bin/hello

catkin_install_python(PROGRAMS
  src/hello.py
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
))
#可执行文件为src/hello.py

以及在执行的脚本文件开头要加上指定解释器的文件

#! /usr/bin/env python
或者(取决于需要的解释器版本)
#! /usr/bin/env python3

python绝对导入的搜索路径一般有几种:

1.python自带的包路径与pip安装路径

2.解释器执行当前脚本的同级路径

3.系统环境变量

本次遇到问题即第2点异常,搜索路径没有添加当前路径,从而导致报错 no module

解决方法一:

在环境变量中添加路径

export PYTHONPATH=/home/xxx/xxx/src

解决方法二:

python脚本执行导入前先添加路径(推荐)

参考链接

import sys
from os.path import abspath, join, dirname
sys.path.insert(0, join(abspath(dirname(__file__))))

(相对引用应该只能模块内使用,外部脚本不能直接使用相对引用)

(__all__ 定义可以指定从当前文件/包中引用 * 时,导出的类或者方法)

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值