Poetry plugin

The Poetry plugin can be used for Python projects that use the Poetry build system.

Keywords

This plugin uses the common plugin keywords as well as those for sources.

Additionally, this plugin provides the plugin-specific keywords defined in the following sections.

poetry-with:

Type: list of strings

Extra dependency groups to use other than the defaults.

Environment variables

This plugin also sets environment variables in the build environment. User-set environment variables will override these values. Users may also set environment variables to configure Poetry using the build-environment key.

PARTS_PYTHON_INTERPRETER

Default value: python3

Either the interpreter binary to search for in PATH or an absolute path to the interpreter (e.g. ${CRAFT_STAGE}/bin/python).

PARTS_PYTHON_VENV_ARGS

Default value: (empty string)

Additional arguments passed to python -m venv.

Dependencies

Since none of the bases that are available for rocks contain a default Python installation, including a Python interpreter in Rockcraft projects is mandatory. Both the python and the poetry plugins also require the venv module to create the virtual environment where Python packages are installed at build time.

The easiest way to do this is to include the python3-venv package in the stage-packages of the part that uses the Python-based plugin. This will pull in the default Python interpreter for the build-base, like Python 3.10 for Ubuntu 22.04. However, other versions can be used by explicitly declaring them - here’s an example that uses python3.12-venv from the Deadsnakes ppa:

package-repositories:
  - type: apt
    ppa: deadsnakes/ppa
    priority: always

parts:
  my-part:
    plugin: <python or poetry>
    source: .
    stage-packages: [python3.12-venv]

How it works

During the build step, the plugin performs the following actions:

  1. It creates a virtual environment directly into the ${CRAFT_PART_INSTALL} directory.

  2. It uses poetry export to create a requirements.txt file in the project’s build directory.

  3. It uses pip to install the packages referenced in requirements.txt into the virtual environment, without any additional dependencies.

  4. It uses pip to install the source package without any additional dependencies.

  5. It runs pip check to ensure the virtual environment is consistent.