ros 部署python包 以及找不到路径 no module |
您所在的位置:网站首页 › 安装不了python › 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 python3python绝对导入的搜索路径一般有几种: 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 |