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

在Visual Studio Code (VSCode) 中配置Python插件以ROS2文件路径通常涉及设置Python环境变量和扩展配置。如果你遇到“不到ROS2文件路径”的问题,可以按照以下步骤操作: 1. **安装必要的扩展**: - 安装`Python`语言支持:`Python`官方推荐的VSCode插件是 `ms-python.python`。 - 可能还需要安装ROS2相关的插件,如`ROS2 Language Server` 或者 `Ros2 Package Explorer`。 2. **设置Python路径**: - 打开VSCode,点击左上角的`Extensions`(扩展),搜索`Python`, 点击`Install`安装`Python`支持。 - 检查是否已经设置了全局Python路径(在`settings.json`或`.vscode/settings.json`中): ``` { "python.path": ["C:/your/path/to/ros2/bin/python"] } ``` - 如果你使用的是系统默认Python,确保ros2的bin目录在PATH环境变量中。 3. **配置工作区路径**: - 对于ROS2,添加工作区(workspace)的根目录到VSCode的工作区设置(`.vscode/workspace settings`): ``` "ross2_workspaces": [ "${workspaceFolder}" ] ``` 4. **启用Language Server**: - 安装并启用ROS2 Language Server扩展,例如`vsc-python-language-server.ros2-ls`。 - 设置该扩展的配置,可能需要指定ros2安装路径: ``` { "ros2.lsp.packagePaths": ["C:/your/path/to/ros2/install/share"], // ...其他可能的配置选项 } ``` 5. **刷新和同步**: - 重启VSCode或者使用命令`Ctrl+Shift+S`(或者其他快捷键)同步你的工作区设置。 如果还是无法到,检查一下你的ROS2安装路径是否正确,以及是否所有依赖都在预期位置。此外,确认是否有权限访问那些文件夹。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值