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

启用Python功能后catkin_make报pyparsing语法错误的解决咨询

问题

在CMakeLists.txt中配置Python3支持后,执行catkin_make时触发语法错误,CMakeLists.txt配置内容如下:

cmake_minimum_required(VERSION 3.0.2)
project(transmit)
set(Python3_INCLUDE_DIRS "/usr/include/python3.6m")
set(Python3_LIBRARIES "/usr/lib/python3.6/config-3.6m-x86_64-linux-gnu/libpython3.6.so")
set(PYTHON_EXECUTABLE "/usr/bin/python3.6")
find_package(catkin REQUIRED COMPONENTS
        roscpp
        rospy
        sensor_msgs
        std_msgs
        )
catkin_package(
        CATKIN_DEPENDS roscpp rospy sensor_msgs std_msgs
)

include_directories(
        include
        ${catkin_INCLUDE_DIRS}
        ${Python3_INCLUDE_DIRS}
)
add_executable(transmit src/transmit.cpp)
target_link_libraries(${PROJECT_NAME}
        ${catkin_LIBRARIES}
        ${Python3_LIBRARIES}
        )

执行catkin_make后终端报错:

Traceback (most recent call last):
  File "/opt/ros/melodic/bin/catkin_make", line 13, in <module>
    from catkin.builder import apply_platform_specific_defaults  # noqa: E402
  File "/opt/ros/melodic/lib/python2.7/dist-packages/catkin/builder.py", line 54, in <module>
    from catkin_pkg.packages import find_packages
  File "/usr/local/lib/python3.6/dist-packages/catkin_pkg/packages.py", line 38, in <module>
    from .package import _get_package_xml
  File "/usr/local/lib/python3.6/dist-packages/catkin_pkg/package.py", line 44, in <module>
    from catkin_pkg.condition import evaluate_condition
  File "/usr/local/lib/python3.6/dist-packages/catkin_pkg/condition.py", line 17, in <module>
    import pyparsing as pp
  File "/usr/local/lib/python3.6/dist-packages/pyparsing/__init__.py", line 100
    major: int
         ^
SyntaxError: invalid syntax

解决方案

问题根源

ROS Melodic是基于Python2.7开发的,手动指定PYTHON_EXECUTABLE为Python3.6后,catkin_make在调用Python2.7环境时,错误加载了Python3版本的pyparsing库——该库使用了Python3.6+才支持的变量类型注解语法,Python2.7无法解析,因此触发语法错误。

修复步骤

  • 1. 替换手动Python配置为CMake标准查找
    删除CMakeLists.txt中手动设置的Python环境变量:

    set(Python3_INCLUDE_DIRS "/usr/include/python3.6m")
    set(Python3_LIBRARIES "/usr/lib/python3.6/config-3.6m-x86_64-linux-gnu/libpython3.6.so")
    set(PYTHON_EXECUTABLE "/usr/bin/python3.6")
    

    改用CMake官方的find_package自动查找Python3:

    find_package(Python3 REQUIRED COMPONENTS Development)
    
  • 2. 修正include与链接配置
    保持include_directories和target_link_libraries中的Python变量为CMake标准变量即可,无需修改:

    include_directories(
            include
            ${catkin_INCLUDE_DIRS}
            ${Python3_INCLUDE_DIRS}
    )
    
    target_link_libraries(${PROJECT_NAME}
            ${catkin_LIBRARIES}
            ${Python3_LIBRARIES}
    )
    
  • 3. 临时切换Python环境(若仍有冲突)
    如果系统全局Python环境存在冲突,执行catkin_make前临时指定Python2.7的依赖路径:

    export PYTHONPATH=/usr/lib/python2.7/dist-packages
    catkin_make
    

    或者直接用Python2.7运行catkin_make:

    python2.7 /opt/ros/melodic/bin/catkin_make
    
  • 4. 降级pyparsing库(可选)
    若必须保留Python3环境,可为Python2.7安装兼容版本的pyparsing:

    sudo pip2 install pyparsing==2.4.7
    

内容的提问来源于stack exchange,提问作者Y.Z.A

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 16:10:54