2016-11-22 5 views
1

У меня в настоящее время есть проблема с импортированием .srv-файлов, которые я определил где-то, что я не могу импортировать в файл service_def.py .. Почему это невозможно?ROS import srv message - relative import jump issue

Я сделал это как rosnode моя ЦСИ папка catkin_workspace выглядит следующим образом

. 
├── 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 

Итак, почему я не могу импортировать свой servi ce сообщения в service_def.py?

сообщение об ошибке:

[email protected]:~/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) 

ответ

0

Как говорит ошибка, вы пытаетесь сделать относительный импорт (т.е. с использованием ..). Вместо этого, так как вы уже садились service как пакет в файле setup.py вы можете использовали это имя пакета непосредственно путем изменения:

from ..srv import * в service_def.py к from service.service_def import *.

+0

как импортировать служебные файлы? –

+0

Проблема заключается в импорте 'service_def.py' .. Он не импортирует файлы srv. –

+0

@CarltonBanks Предполагается, что ваш 'setup.py' определяет сервис (который согласно Traceback он делает), а в' CMakeLists.txt' вы определили служебные файлы (как указано в учебниках ROS). Вы можете взглянуть на этот [учебник] (http://wiki.ros.org/rospy_tutorials/Tutorials/Makefile), чтобы увидеть пример того, как «setup.py» используется catkin. –

 Смежные вопросы

  • Нет связанных вопросов^_^