为什么导入在这个python脚本中工作

2024-05-16 00:30:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用ROS包,来自this教程。考虑到当前工作目录或路径中列出的任何其他目录中没有AddTwoIntsResponse,这个导入语句出人意料地有效。还有,为什么要导入.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会抛出一个导入错误

我的理解哪里出了问题


Tags: frompyimport目录addserverrossrv
1条回答
网友
1楼 · 发布于 2024-05-16 00:30:32
|  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/您的python版本下/dist packages/包名/srv

如果您的工作区是源代码,那么catkin_ws/devel/lib/您的python版本/dist packages/已经添加到您的PYTHONPATH中,这就是您能够成功导入它们的方式

对于您正在使用的教程包,如果您安装了教程的二进制文件,则即使您尚未获取当前catkin目录的源代码,导入也可能会起作用。通过这种方式,python模块驻留在/opt/ros/ros版本/lib/您的python版本/dist包/下,这也是PYTHONPATH的一部分。(如果ROS env可用)

相关问题 更多 >