Skip to main content

A Colcon extension providing support for Python projects that use Poetry

Project description

colcon-poetry-ros

An extension for colcon-core that adds support for Python packages that use Poetry within ROS. This extension is a replacement for Colcon's built-in setup.cfg based Python support and the Python-related bits in colcon-ros.

We use this extension with Foxy, but newer versions should work as well. Please create an issue if you see problems!

Getting Started

Start by install this extension with Pip:

pip3 install colcon-poetry-ros

Then, add a pyproject.toml in the root of your package's directory. Each package should have its own pyproject.toml file. It should look something like this:

[tool.poetry]
name = "my_package"
version = "0.1.0"
description = "Does something cool"
authors = ["John Smith <johnny@urbanmachine.build>"]
license = "BSD-3-Clause"

[tool.poetry.dependencies]
python = "^3.8"

[tool.poetry.scripts]
node_a = "my_package.node_a:main"
node_b = "my_package.node_b:main"

[tool.colcon-poetry-ros.data-files]
"share/ament_index/resource_index/packages" = ["resource/my_package"]
"share/my_package" = ["package.xml"]

[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"

Finally, run your build like normal:

colcon build

Testing

This extension currently supports projects based on PyTest. Run the following command to start tests:

colcon test

Node Entrypoints

If you want to be able to run your nodes using ros2 run, add your node's entrypoint to the tool.poetry.scripts table. See Poetry's documentation for details.

[tool.poetry.scripts]
node_a = "my_package.node_a:main"
node_b = "my_package.node_b:main"

Data Files

Poetry has only limited support for including data files in an installation, and the current implementation is not flexible enough to be used with ROS. Instead, this extension consults a custom section in your pyproject.toml, called tool.colcon-poetry-ros.data-files.

The format is intended to be identical to the data_files field used by setuptools.

All ROS projects must have, at minimum, these entries in the tool.colcon-poetry-ros.data-files section (with {package_name} replaced with the name of your package):

[tool.colcon-poetry-ros.data-files]
"share/ament_index/resource_index/packages" = ["resource/{package_name}"]
"share/{package_name}" = ["package.xml"]

These entries take care of adding the package index marker and package.xml file to the installation.

Installing Dependencies

Poetry dependencies are not installed as part of the node build process, but they can be installed using a separate tool that's included in this package.

python3 -m colcon_poetry_ros.dependencies.install --base-paths <path to your nodes>

This command installs each node's dependencies to Colcon's base install directory. This means that your dependencies live alongside your node's code after it's built, isolated from the rest of your system.

If you customize colcon build with the --install-base or --merge-install flags, make sure to provide those to this tool as well.

Communicating Dependencies to Colcon

Colcon expects extensions to report their dependencies as dependency descriptors so that they can be shown in tools like colcon graph. The following sections describe how each dependency type is sourced from your pyproject.toml.

Build Dependencies

This extension uses the requires field in the build-system table to source build dependencies. See the section in PEP 518 for details. This section might only be needed if you're using a compiler like Cython that runs during package installation. Since these packages are not locked by Poetry, the version specifications in the requires field will be used as-is.

Runtime Dependencies

Runtime dependencies are pulled from the tool.poetry.dependencies table. See Poetry's documentation for details. Dependency versions are defined by the poetry.lock file.

You can include extras by setting the POETRY_RUN_DEPENDS_EXTRAS environment variable. Multiple extras can be provided and are separated by commas. By default, no extras are included.

Test Dependencies

Poetry currently has no official way of defining test dependencies, so test dependencies are instead expected to be in an extra called "test". Dependency versions are defined by the poetry.lock file.

You can change which extras are used for test dependencies by setting the POETRY_TEST_DEPENDS_EXTRAS environment variable. Multiple extras can be provided and are separated by commas. As mentioned above, this value is set to "test" by default.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

colcon-poetry-ros-0.5.0.tar.gz (13.3 kB view details)

Uploaded Source

Built Distribution

colcon_poetry_ros-0.5.0-py3-none-any.whl (15.2 kB view details)

Uploaded Python 3

File details

Details for the file colcon-poetry-ros-0.5.0.tar.gz.

File metadata

  • Download URL: colcon-poetry-ros-0.5.0.tar.gz
  • Upload date:
  • Size: 13.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for colcon-poetry-ros-0.5.0.tar.gz
Algorithm Hash digest
SHA256 7a0064ad9aa314042b0a402521a239642260a2354e6c5642fc9fb4af3d69b7c0
MD5 ad24e61d66fee391c14d6e55cdca1f30
BLAKE2b-256 d75809082d5014a7dbdd418cbefe25b6ae11a80e5d0888ec358bfefd19a9bc4b

See more details on using hashes here.

File details

Details for the file colcon_poetry_ros-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: colcon_poetry_ros-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 15.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for colcon_poetry_ros-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 37ed83854d0c0e7f55f224d96cb818b16b4e6bd50f630c50c01332121a88efc8
MD5 8ba669ec585bb8ba8f18bff3767eacbd
BLAKE2b-256 0dd390b9c703255ef3d75a319f4c8ca20b260d92a903f224ac2bc959017b3b0a

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page