警告

您正在阅读的 ROS 2 文档版本已达到 EOL(生命周期结束),不再受官方支持。如果您想了解最新信息,请访问 Jazzy.

ament_cmake_python 用户文档

ament_cmake_python 的软件包提供 CMake 功能。 ament_cmake 构建类型包含 Python 代码。请参见 ament_cmake 用户文档 了解更多信息。

备注

纯 Python 软件包应使用 ament_python 在大多数情况下,创建类型都是"......要创建一个 ament_python 软件包,请参见 创建第一个 ROS 2 软件包. ament_cmake_python 只应在不可能的情况下使用,如混合使用 C/C++ 和 Python 代码时。

基础知识

项目基本大纲

名为 "my_project "的软件包的大纲,其中包含 ament_cmake 构建类型,使用 ament_cmake_python 看起来像

.└─── my_project ├─── CMakeLists.txt ├── package.xml └─── my_project ├── __init__.py └─── my_script.py

"(《世界人权宣言》) __init__.py 文件可以为空,但需要 使 Python 将包含它的目录视为软件包.还可以有 来源包括 目录中的 CMakeLists.txt 其中包含 C/C++ 代码。

使用 ament_cmake_python

软件包必须声明依赖于 ament_cmake_python 在其 package.xml.

构建工具的依赖关系<buildtool_depend>;ament_cmake_python</buildtool_depend>;

"(《世界人权宣言》) CMakeLists.txt 应包含

查找软件包(ament_cmake_python 要求)
# ...
ament_python_install_package(${项目名称})

反对 ament_python_install_package() 是与 CMakeLists.txt 中包含 Python 文件。在本例中,它是 我的项目${project_name} 项目名称.

警告

呼叫 生成接口ament_python_install_package 在同一个 CMake 项目中无法运行。请参见 Github 问题 获取更多信息。最好的做法是将信息生成单独打包。

然后,另一个正确依赖于 我的项目 可以像普通 Python 模块一样使用它:

 my_project.my_script 舶来品 我的函数

假设 my_script.py 包含一个名为 my_function().

使用 ament_cmake_pytest

包装 ament_cmake_pytest 用于使测试可被 cmake.软件包必须声明测试依赖于 ament_cmake_pytest 在其 package.xml.

<test_depend>;ament_cmake_pytest</test_depend>;

假设软件包的文件结构如下,测试位于 试验 文件夹。

.├── CMakeLists.txt ├── my_project │ └─── my_script.py ├─ package.xml └── tests ├── test_a.py └── test_b.py

"(《世界人权宣言》) CMakeLists.txt 应包含

如果(构建测试)
  查找软件包(ament_cmake_pytest 要求)
  设置(_pytest_tests
    tests/test_a.py
    tests/test_b.py
    # 在此处添加其他测试文件
  )
  执行(测试路径 ${_pytest_tests})
    获取文件名组件(测试名称 ${测试路径} 名称)
    ament_add_pytest_test(${测试名称} ${测试路径}
      APPEND_ENV PYTHONPATH=${cmake_current_binary_dir}
      超时 60
      工作目录 ${cmake_source_dir}
    )
  endforeach()
endif()

与支持自动发现测试的 ament_python 相比,ament_cmake_pytest 必须调用每个测试文件的路径。超时时间可根据需要缩短。

现在,您可以使用 标准 colcon 测试命令.