为什么 import 在这个 ROS python 脚本中有效

问题描述 投票:0回答:2

我正在使用 ROS 软件包,并且来自 this 教程。鉴于当前工作目录或 PATH 中列出的任何其他目录中任何地方都没有

AddTwoIntsResponse
,这个 import 语句令人惊讶地有效。另外,为什么会导入 .srv

# add_two_ints_server.py
from beginner_tutorials.srv import AddTwoInts, AddTwoIntsResponse 

当前工作目录是

~/catkin_ws/src/beginner_tutorials/srv

这是我的ROS目录布局:

catkin_ws
|-- src
|   `-- beginner_tutorials
|       |-- scripts
|       |   `-- add_two_ints_server.py
|       `-- srv
|           `-- AddTwoInts.srv
|-- build
`-- devel

AddTwoInts.srv的内容是:

int64 a
int64 b
---
int64 sum

根据我的理解,这应该抛出一个

ImportError: cannot import name 'AddTwoIntsResponse'
但事实并非如此。导入任何其他文件时说: from beginner_tutorials.srv import foo
 会抛出 
ImportError

我的理解哪里出了问题?

python import ros
2个回答
4
投票
|-- src | `-- beginner_tutorials | |-- scripts | | `-- add_two_ints_server.py | `-- srv | `-- AddTwoInts.srv |-- build |-- devel // this is where your modules are imported from
当您使用catkin_make构建包时,'catkin`会为.srv文件中定义的服务类型生成相关的python文件,并将它们放在catkin_ws/devel/lib/

your-python-version/dist-packages/package下-名称/srv。

如果您的工作区已获取,则 catkin_ws/devel/lib/

your-python-version/dist-packages/ 已添加到您的 PYTHONPATH 中,这就是您成功导入它们的方式。

对于您正在使用的教程包,如果您安装了教程的二进制文件,即使您没有获取当前的 catkin 目录,导入也可能会起作用。这样,python 模块就位于 /opt/ros/

ros-version/lib/your-python-version/dist-packages/ 下,这又是 PYTHONPATH 的一部分。 (如果ROS环境可用)


0
投票
请参阅

https://perfect-dev.tistory.com/62 了解此博客。它是韩语的,但您可能会发现将其翻译成英语会很有帮助。

这是我自己解决的。

© www.soinside.com 2019 - 2024. All rights reserved.