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

您所在的位置:网站首页 安装不了python ros 部署python包 以及找不到路径 no module

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

#ros 部署python包 以及找不到路径 no module| 来源: 网络整理| 查看: 265

简单总结一下: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__ 定义可以指定从当前文件/包中引用 * 时,导出的类或者方法)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3