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

ROS 2 Humble编译unitree_api报错:ModuleNotFoundError: No module named 'em'

解决ROS2 Humble编译unitree_api时ModuleNotFoundError: No module named 'em'的问题

核心原因

ROS2的消息/服务生成工具依赖empy库(提供em模块),但Python虚拟环境默认隔离了系统site-packages,导致编译时虚拟环境内的Python无法找到已安装的em模块;即使你在系统或虚拟环境内装过empy,也可能因为环境变量或依赖版本优先级问题导致无法识别。

可行解决方案

方案1:让虚拟环境继承系统Python包

创建虚拟环境时添加--system-site-packages参数,让虚拟环境包含系统级安装的Python包(包括python3-empy):

# 未创建虚拟环境的话,用此命令创建
python3 -m venv --system-site-packages your_venv_name

# 已创建虚拟环境的情况,先激活,再手动添加系统site-packages路径
source your_venv_name/bin/activate
# 获取系统python3的site-packages路径
PYTHON_SITE_PACKAGES=$(python3 -c "import site; print(site.getsitepackages()[0])")
# 将路径写入虚拟环境的包索引文件
echo $PYTHON_SITE_PACKAGES > your_venv_name/lib/python3.10/site-packages/system-packages.pth

方案2:在虚拟环境内适配ROS2版本安装empy

  1. 激活虚拟环境:
source your_venv_name/bin/activate
  1. 清理冲突包:
pip uninstall -y empy em
sudo apt remove -y python3-empy
  1. 安装ROS2 Humble适配的empy版本(推荐3.3.4):
pip install empy==3.3.4
  1. 按顺序加载环境后编译:
source /opt/ros/humble/setup.bash
source your_venv_name/bin/activate
colcon build --packages-select unitree_api

方案3:临时使用系统Python编译(应急用)

如果虚拟环境不是必须的,可以取消激活虚拟环境,直接用系统Python编译:

source /opt/ros/humble/setup.bash
deactivate
colcon build --packages-select unitree_api

验证方法

编译前在虚拟环境内检查em模块是否可导入:

source your_venv_name/bin/activate
python3 -c "import em; print('em module found')"

如果输出em module found,说明模块已正确安装,再执行编译即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 10:24:50