我目前在导入.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)
答案 0 :(得分:0)
如错误所示,您正在尝试进行相对导入(即使用..
)。相反,由于您已在service
文件中将setup.py
设置为包,因此您可以通过更改直接使用该包名:
from ..srv import *
至service_def.py
from service.service_def import *
。