ROS2中运行带依赖Python文件报错:ros2 run无法找到依赖求助
问题分析与解决办法
这个问题十有八九和CMakeLists.txt的配置脱不了干系,核心原因是VS Code和ros2 run的运行环境存在差异:
1. 环境差异导致的路径问题
VS Code运行代码时,会自动将项目本地的子文件夹(比如你提到的Yolov5_StrongSORT_OSNet)加入Python的搜索路径,因此能正常找到依赖模块。但使用ros2 run时,ROS2是按照包安装后的路径加载环境的,本地子文件夹默认不会被纳入Python搜索范围,自然就找不到对应模块了。
2. CMakeLists.txt必须调整的配置点
要让ros2 run识别到子文件夹里的模块,你需要在CMakeLists.txt中添加以下配置:
- 将
Yolov5_StrongSORT_OSNet整个文件夹安装到ROS2包的共享路径下,添加这条指令:install(DIRECTORY Yolov5_StrongSORT_OSNet DESTINATION share/${PROJECT_NAME}/ ) - 同时要在
package.xml中声明Python依赖,确保<exec_depend>节点包含python3:<exec_depend>python3</exec_depend>
3. 临时救急的代码修改方案
如果不想修改CMake配置,也可以在sub_UNITY_YOLOSORT.py开头手动将子文件夹路径添加到Python搜索路径:
import sys from pathlib import Path sys.path.append(str(Path(__file__).parent / "Yolov5_StrongSORT_OSNet"))
不过这种方法不够规范,长期维护还是推荐修改CMake配置的方式。
4. 验证步骤
修改完成后,重新编译包:colcon build --packages-select 你的包名,然后打开新终端执行source install/setup.bash,再运行ros2 run命令测试。
内容的提问来源于stack exchange,提问作者tgr
相关产品推荐
相关产品推荐

