警告
您正在阅读的 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 测试命令.