ROS导入srv消息 - 相对导入跳转问题

时间:2016-11-22 18:37:24

标签: python ros

我目前在导入.srv文件时遇到了一些问题我已经定义了哪些地方无法导入到我的service_def.py文件中。为什么这不可能?

我把它作为一个rosnode,我的catkin_workspace的src文件夹看起来像这样

.
├── CMakeLists.txt -> /opt/ros/indigo/share/catkin/cmake/toplevel.cmake
└── service
    ├── CMakeLists.txt
    ├── include
    │   └── service
    │       ├── __init__.py
    │       ├── service_def.py
    │       └── service_def.pyc
    ├── package.xml
    ├── setup.py
    ├── src
    │   └── service_node.py
    └── srv
        ├── get.srv
        ├── set.srv
        └── __init__.py

service_def.py定义为

from ..srv import *

我的service_node.py我rosrun导入service_def.py

import service.service_def

那么为什么我无法在service_def.py中导入我的服务消息?

错误消息:

k@k:~/python_service/src$ rosrun service service_node.py 
Traceback (most recent call last):
  File "/home/k/python_service/src/service/src/service_node.py", line 5, in <module>
    import service.service_def
  File "/home/k/python_service/src/service/include/service/service_def.py", line 1, in <module>
    from ..srv import *
ValueError: Attempted relative import beyond toplevel package

我的setup.py看起来像这样:

## ! DO NOT MANUALLY INVOKE THIS setup.py, USE CATKIN INSTEAD
from distutils.core import setup
from catkin_pkg.python_setup import generate_distutils_setup
# fetch values from package.xml
setup_args = generate_distutils_setup(
packages=['service'],
package_dir={'': 'include'},
)
setup(**setup_args)

1 个答案:

答案 0 :(得分:0)

如错误所示,您正在尝试进行相对导入(即使用..)。相反,由于您已在service文件中将setup.py设置为包,因此您可以通过更改直接使用该包名:

from ..srv import *service_def.py

from service.service_def import *