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 and Humble, but other 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 mostly identical to the data_files
field used
by setuptools. The main differences are that copying
entire directories is supported, and globbing is not yet implemented.
All ROS packages 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 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 package's dependencies to Colcon's base install directory. This means that your dependencies live alongside your package'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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file colcon-poetry-ros-0.8.0.tar.gz
.
File metadata
- Download URL: colcon-poetry-ros-0.8.0.tar.gz
- Upload date:
- Size: 14.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.16
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5c53fabf9d6754dc1947ff5166d11a25fabc0051cffef55b20612a9b4347388c |
|
MD5 | 8ce0bf3859f7dc182893cfdc1421ddf5 |
|
BLAKE2b-256 | e593d2fb17dfcdb39f551bf1cb08cb130788b8a020961a67ed09e9620cd6e21b |
File details
Details for the file colcon_poetry_ros-0.8.0-py3-none-any.whl
.
File metadata
- Download URL: colcon_poetry_ros-0.8.0-py3-none-any.whl
- Upload date:
- Size: 16.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.16
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7a5ff3eb5dc2c020fd9e30b9f5087fe7dc3489e8587cd09fe1ec58af84753bd1 |
|
MD5 | 6210dd26a18c6258e003646b3c2561a7 |
|
BLAKE2b-256 | ce68d1fd07d437ef404057b0fc0116e7e312f18dcde77d3d268370e1ae996999 |