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

运行generate_lib创建micro-ROS固件时遇Jinja2导入错误求助

问题:micro-ROS固件工作空间创建失败,Jinja2依赖冲突导致ament_package构建错误

我正在为micro-ROS与Teensy通信制作自定义消息,参考micro-ROS官方教程创建新类型,教程第一步要求进入firmware/mcu_ws目录,因此执行ros2 run micro_ros_setup create_firmware_ws.sh generate_lib命令尝试创建该目录,但始终失败。已尝试重新安装micro-ROS、Python3及python3-catkin-pkg,问题仍未解决。

错误输出

(因字符长度限制,已移除前约40行克隆过程日志)
=== ./ros2/rosidl_defaults (git) ===                             
正在克隆到 '.'...                                              
=== ./ros2/test_interface_files (git) ===                        
正在克隆到 '.'...                                              
=== ./ros2/unique_identifier_msgs (git) ===                                                                                        
正在克隆到 '.'...                                              
...........                                                      
=== ./eProsima/Micro-CDR (git) ===                               
正在克隆到 '.'...                                              
=== ./eProsima/Micro-XRCE-DDS-Client (git) ===                                                                                     
正在克隆到 '.'...                                              
=== ./uros/micro_ros_msgs (git) ===                              
正在克隆到 '.'...                                              
=== ./uros/micro_ros_utilities (git) ===                         
正在克隆到 '.'...                                              
=== ./uros/rcl (git) ===                                         
正在克隆到 '.'...                                              
=== ./uros/rclc (git) ===                                                                                                                                                                                                                                             
正在克隆到 '.'...                                                                                                                                                                                                                                                   
=== ./uros/rcutils (git) ===                                                                                                                                                                                                                                          
正在克隆到 '.'...                                                                                                                                                                                                                                                   
=== ./uros/rmw_microxrcedds (git) ===                                                                                                                                                                                                                                 
正在克隆到 '.'...                                                                                                                                                                                                                                                   
=== ./uros/rosidl_typesupport (git) ===                                                                                                                                                                                                                               
正在克隆到 '.'...                                                                                                                                                                                                                                                   
=== ./uros/rosidl_typesupport_microxrcedds (git) ===                                                                                                                                                                                                                  
正在克隆到 '.'...                                                                                                                                                                                                                                                   
=== ./uros/tracetools (git) ===                                                                                                                                                                                                                                       
正在克隆到 '.'...                                                                                                                                                                                                                                                   
交叉编译环境:清理路径                                                                                                                                                                                                                              
[0.683s] 警告:colcon.colcon_ros.prefix_path.catkin:环境变量CMAKE_PREFIX_PATH中的路径'/home/fabi/projects/install/example_interfaces'不存在                                                                                           
[0.683s] 警告:colcon.colcon_ros.prefix_path.catkin:环境变量CMAKE_PREFIX_PATH中的路径'/home/fabi/projects/install/microxrcedds_client'不存在                                                                                          
[0.684s] 警告:colcon.colcon_ros.prefix_path.catkin:环境变量CMAKE_PREFIX_PATH中的路径'/home/fabi/projects/install/microcdr'不存在                                                                                                     
[0.684s] 警告:colcon.colcon_ros.prefix_path.catkin:环境变量CMAKE_PREFIX_PATH中的路径'/home/fabi/projects/install/micro_ros_agent'不存在                                                                                              
[0.684s] 警告:colcon.colcon_ros.prefix_path.catkin:环境变量CMAKE_PREFIX_PATH中的路径'/home/fabi/projects/install/CarCom'不存在                                                                                                       
[0.684s] 警告:colcon.colcon_ros.prefix_path.catkin:环境变量CMAKE_PREFIX_PATH中的路径'/home/fabi/projects/install/MXObjects'不存在                                                                                                    
[0.684s] 警告:colcon.colcon_ros.prefix_path.catkin:环境变量CMAKE_PREFIX_PATH中的路径'/home/fabi/projects/install/MXJoystick'不存在                                                                                                   
[0.684s] 警告:colcon.colcon_ros.prefix_path.catkin:环境变量CMAKE_PREFIX_PATH中的路径'/home/fabi/projects/microros_ws/install/microxrcedds_client'不存在                                                                              
[0.684s] 警告:colcon.colcon_ros.prefix_path.catkin:环境变量CMAKE_PREFIX_PATH中的路径'/home/fabi/projects/microros_ws/install/microcdr'不存在                                                                                         
开始 >>> ament_package                                                                                                                                                                                                                                            
开始 >>> ament_lint                                                                                                                                                                                                                                               
开始 >>> gtest_vendor                                                                                                                                                                                                                                             
开始 >>> ament_cppcheck                                                                                                                                                                                                                                           
开始 >>> ament_pycodestyle                                                                                                                                                                                                                                        
完成 <<< gtest_vendor [1.83s]                                                                                                                                                                                                                                     
开始 >>> gmock_vendor                                                                                                                                                                                                                                             
完成 <<< gmock_vendor [0.24s]                                                                                                                                                                                                                                     
--- 标准错误输出: ament_package                                                                                                                                                                                                                                             
回溯(最近的调用最后):                               
  文件"/usr/lib/python3/dist-packages/colcon_core/executor/__init__.py", 第91行, 在 __call__                                                                                                                                                                        
    rc = await self.task(*args, **kwargs)                                                                                          
  文件"/usr/lib/python3/dist-packages/colcon_core/task/__init__.py", 第93行, 在 __call__                                                                                                                                                                            
    return await task_method(*args, **kwargs)                                                                                      
  文件"/usr/lib/python3/dist-packages/colcon_ros/task/ament_python/build.py", 第105行, 在 build                                                                                                                                                                     
    return await extension.build(additional_hooks=additional_hooks)                                                                
  文件"/usr/lib/python3/dist-packages/colcon_core/task/python/build.py", 第59行, 在 build                                                                                                                                                                           
    available_commands = await self._get_available_commands(                                                                       
  文件"/usr/lib/python3/dist-packages/colcon_core/task/python/build.py", 第142行, 在 _get_available_commands                                                                                                                                                        
    output = await check_output(                                 
  文件"/usr/lib/python3/dist-packages/colcon_core/subprocess.py", 第128行, 在 check_output                                                                                                                                                                          
    assert not rc, f'预期 {args} 执行成功: {stderr_data}'                                                                       
AssertionError: 预期 ['/usr/bin/python3', 'setup.py', '--help-commands'] 执行成功: 回溯(最近的调用最后):                                                                                                                                              
  文件"setup.py", 第6行, 在 <module>                           
    setup(                                                       
  文件"/home/fabi/.local/lib/python3.8/site-packages/setuptools/__init__.py", 第87行, 在 setup                                                                                                                                                                      
    return distutils.core.setup(**attrs)                         
  文件"/home/fabi/.local/lib/python3.8/site-packages/setuptools/_distutils/core.py", 第164行, 在 setup                                                                                                                                                              
    ok = dist.parse_command_line()                               
  文件"/home/fabi/.local/lib/python3.8/site-packages/setuptools/_distutils/dist.py", 第471行, 在 parse_command_line                                                                                                                                                 
    if self.handle_display_options(option_order):                                                                                  
  文件"/home/fabi/.local/lib/python3.8/site-packages/setuptools/dist.py", 第1185行, 在 handle_display_options                                                                                                                                                       
    return _Distribution.handle_display_options(self, option_order)                                                                
  文件"/home/fabi/.local/lib/python3.8/site-packages/setuptools/_distutils/dist.py", 第685行, 在 handle_display_options                                                                                                                                             
    self.print_commands()                                        
  文件"/home/fabi/.local/lib/python3.8/site-packages/setuptools/dist.py", 第962行, 在 print_commands                                                                                                                                                                
    cmdclass = ep.load()                                         
  文件"/home/fabi/.local/lib/python3.8/site-packages/setuptools/_vendor/importlib_metadata/__init__.py", 第194行, 在 load 
  module = import_module(match.group('module'))                                                                                  
  文件"/usr/lib/python3.8/importlib/__init__.py", 第127行, 在 import_module                                                      
    return _bootstrap._gcd_import(name[level:], package, level)                                                                    
  文件"<frozen importlib._bootstrap>", 第1014行, 在 _gcd_import                                                                  
  文件"<frozen importlib._bootstrap>", 第991行, 在 _find_and_load                                                                
  文件"<frozen importlib._bootstrap>", 第975行, 在 _find_and_load_unlocked                                                       
  文件"<frozen importlib._bootstrap>", 第671行, 在 _load_unlocked                                                                
  文件"<frozen importlib._bootstrap_external>", 第848行, 在 exec_module                                                          
  文件"<frozen importlib._bootstrap>", 第219行, 在 _call_with_frames_removed                                                     
  文件"/home/fabi/.local/lib/python3.8/site-packages/sphinx/setup_command.py", 第20行, 在 <module>                                                                                                                                                                  
    from sphinx.application import Sphinx                                                                                          
  文件"/home/fabi/.local/lib/python3.8/site-packages/sphinx/application.py", 第43行, 在 <module>                                                                                                                                                                    
    from sphinx.registry import SphinxComponentRegistry                                                                            
  文件"/home/fabi/.local/lib/python3.8/site-packages/sphinx/registry.py", 第24行, 在 <module>                                                                                                                                                                       
    from sphinx.builders import Builder                          
  文件"/home/fabi/.local/lib/python3.8/site-packages/sphinx/builders/__init__.py", 第26行, 在 <module>                                                                                                                                                              
    from sphinx.util import import_object, logging, progress_message, rst, status_iterator                                                                                                                                                                            
  文件"/home/fabi/.local/lib/python3.8/site-packages/sphinx/util/rst.py", 第21行, 在 <module>                                                                                                                                                                       
    from jinja2 import Environment, environmentfilter                                                                              
导入错误: 无法从'jinja2'导入名称'environmenfilter' (/home/fabi/.local/lib/python3.8/site-packages/jinja2/__init__.py)                                                                                                                                  
---                                                              
失败   <<< ament_package [2.52s, 退出码1]                                                                             
终止  <<< ament_pycodestyle [2.46s]                           
终止  <<< ament_lint [2.52s]                                  
终止  <<< ament_cppcheck [2.51s]                              

摘要: 2个包构建完成 [2.99s]                             
  1个包构建失败: ament_package                                
  3个包构建终止: ament_cppcheck ament_lint ament_pycodestyle                                                                  
  1个包有标准错误输出: ament_package                                                                                       
  54个包未处理                                      
预期 ['/usr/bin/python3', 'setup.py', '--help-commands'] 执行成功: 回溯(最近的调用最后):                                                                                                                                                              
  文件"setup.py", 第6行, 在 <module>                           
    setup(                                                       
  文件"/home/fabi/.local/lib/python3.8/site-packages/setuptools/__init__.py", 第87行, 在 setup                                                                                                                                                                      
    return distutils.core.setup(**attrs)                         
  文件"/home/fabi/.local/lib/python3.8/site-packages/setuptools/_distutils/core.py", 第164行, 在 setup                                                                                                                                                              
    ok = dist.parse_command_line()                               
  文件"/home/fabi/.local/lib/python3.8/site-packages/setuptools/_distutils/dist.py", 第471行, 在 parse_command_line                                                                                                                                                 
    if self.handle_display_options(option_order):                                                                                  
  文件"/home/fabi/.local/lib/python3.8/site-packages/setuptools/dist.py", 第1185行, 在 handle_display_options                                                                                                                                                       
    return _Distribution.handle_display_options(self, option_order)                                                                
  文件"/home/fabi/.local/lib/python3.8/site-packages/setuptools/_distutils/dist.py", 第685行, 在 handle_display_options                                                                                                                                             
    self.print_commands()                                        
  文件"/home/fabi/.local/lib/python3.8/site-packages/setuptools/dist.py", 第962行, 在 print_commands                                                                                                                                                                
    cmdclass = ep.load()                                         
  文件"/home/fabi/.local/lib/python3.8/site-packages/setuptools/_vendor/importlib_metadata/__init__.py", 第194行, 在 load                                                                                                                                           
    module = import_module(match.group('module'))                                                                                  
  文件"/usr/lib/python3.8/importlib/__init__.py", 第127行, 在 import_module                                                      
    return _bootstrap._gcd_import(name[level:], package, level)                                                                    
  文件"<frozen importlib._bootstrap>", 第1014行, 在 _gcd_import                                                                  
  文件"<frozen importlib._bootstrap>", 第991行, 在 _find_and_load                                                                
  文件"<frozen importlib._bootstrap>", 第975行, 在 _find_and_load_unlocked                                                       
  文件"<frozen importlib._bootstrap>", 第671行, 在 _load_unlocked                                                                
  文件"<frozen importlib._bootstrap_external>", 第848行, 在 exec_module                                                          
  文件"<frozen importlib._bootstrap>", 第219行, 在 _call_with_frames_removed                                                     
  文件"/home/fabi/.local/lib/python3.8/site-packages/sphinx/setup_command.py", 第20行, 在 <module>                                                                                                                                                                  
    from sphinx.application import Sphinx                                                                                          
  文件"/home/fabi/.local/lib/python3.8/site-packages/sphinx/application.py", 第43行, 在 <module>
   from sphinx.registry import SphinxComponentRegistry
  文件"/home/fabi/.local/lib/python3.8/site-packages/sphinx/registry.py", 第24行, 在 <module>
    from sphinx.builders import Builder
  文件"/home/fabi/.local/lib/python3.8/site-packages/sphinx/builders/__init__.py", 第26行, 在 <module>
    from sphinx.util import import_object, logging, progress_message, rst, status_iterator
  文件"/home/fabi/.local/lib/python3.8/site-packages/sphinx/util/rst.py", 第21行, 在 <module>
    from jinja2 import Environment, environmentfilter
导入错误: 无法从'jinja2'导入名称'environmenfilter' (/home/fabi/.local/lib/python3.8/site-packages/jinja2/__init__.py)

解决方案

问题根源是Jinja2版本不兼容:Jinja2 3.1.0及以上版本移除了environmentfilter接口,而当前环境中的Sphinx版本较旧,仍在调用该接口,导致导入错误。

解决步骤:

  1. 降级Jinja2到兼容版本(推荐3.0.3):
pip3 install jinja2==3.0.3 --user
  1. 或者升级Sphinx到支持新版本Jinja2的版本:
pip3 install --upgrade sphinx --user
  1. 重新执行创建固件工作空间的命令:
ros2 run micro_ros_setup create_firmware_ws.sh generate_lib

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 02:03:12