You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ROS包内跨目录导入Python模块报错:ImportError: No module named src.lab03

解决ROS包内Python模块跨目录导入问题

我来帮你搞定这个ROS包内Python模块导入的问题,这是几个常用且靠谱的解决方案:

1. 使用相对导入(推荐,符合Python模块规范)

因为foo.py位于src/lab04,和lab03是同级子目录,直接用相对导入就能轻松导入:

from ..lab03 import map_helper as helper

注意:这种方式下,你不能直接把foo.py作为独立脚本运行(比如执行python foo.py),因为相对导入仅在模块被其他代码导入时生效。你需要通过ROS的rosrun命令启动它(比如rosrun package foo.py),或者将其作为模块导入到其他脚本中。

2. 手动添加src目录到Python路径

如果需要直接调试运行脚本,可以在foo.py开头添加一段代码,手动把src目录加入Python的搜索路径:

import sys
import os

# 获取当前文件所在目录的父目录(也就是整个包的src目录)
src_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
sys.path.insert(0, src_dir)

from lab03 import map_helper as helper

这种方法不依赖ROS环境,适合本地快速调试脚本。

3. 利用ROS的包路径(更贴合ROS生态)

借助rospkg工具获取你的ROS包路径,再把src目录加入搜索路径,这种方法更适配ROS的工作流,不会出现硬编码路径的问题:

import rospkg
import sys
import os

# 初始化RosPack对象
rospack = rospkg.RosPack()
# 替换成你的ROS包的名字(也就是最外层package目录的名称)
package_name = "package"
package_path = rospack.get_path(package_name)

# 将包内的src目录添加到Python搜索路径
sys.path.insert(0, os.path.join(package_path, 'src'))

from lab03 import map_helper as helper

使用前确保rospkg已安装(ROS环境通常自带,如果缺失可以用pip install rospkg安装)。

为什么原导入方式会报错?

你写的from src.lab03 import ...找不到模块,核心原因是Python的搜索路径里没有包含你的ROS包根目录。当你直接运行脚本时,Python的当前工作路径可能是lab04或者其他位置,它无法定位到上层的src目录;即使通过ROS运行,如果包的路径没有被正确添加到PYTHONPATH中,也会触发这个错误。

内容的提问来源于stack exchange,提问作者nag92

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:58:42