Skip to main content

A Poetry plugin that aims to simplify package & dependency management for projects in Monorepos.

Project description

Poetry Multiproject Plugin

This is a Python Poetry plugin, adding commands with support for including packages outside of a project root.

This is achieved by setting the workspace (or commonly the repo) folder as the root folder. Also, the plugin makes it possible specify a project specific TOML file.

Example usage: running the command from the workspace root folder

poetry build-project --t path/to/myproject.toml

Optionally, run the command from the same folder as the actual project specific TOML file:

poetry build-project

Why?

Being able to specify package includes outside of a project root is especially useful when structuring code in a Monorepo, where projects can share components.

When the plugin is installed, there is a new command available: build-project.

How is it different from the "poetry build" command?

Poetry doesn't seem allow to reference code that is outside of the project root.

Something like this will cause the build to fail:

# this will fail using the default poetry build command

packages = [
    { include = "the_code_in_my_project"
    { include = "../../../my-shared-package" }]

By explicitly setting a workspace root, it is possible to reference outside components like this:

packages = [
    { include = "my/project/path/the_code_in_my_project"
    { include = "shared/a-shared-package" }]

The project specific code is referenced with a path starting from the workspace root. The external includes can now be referenced as if the project specific TOML were located at the root.

projects/
  my-app/
    pyproject.toml (including a shared package)
    app.py

  my-service/
    pyproject.toml (including other shared packages)
    app.py

shared/
  my-package/
   __init__.py
   code.py

  my-other-package/
   __init__.py
   code.py

.workspace (a file that tells the plugin where to find the workspace root)

As a fallback, the plugin will look for a pyproject.toml or a .git folder to determine the workspace root.

Using the preview of Poetry

This plugin depends on a preview of Poetry with functionality for adding custom Plugins. Have a look at the official Poetry preview docs for how to install it.

Install the plugin according to the official Poetry docs.

When installed, there will be a new command available: build-project.

Modifying the Poetry internals

Setting the workspace root is done by altering the internal properties of the Poetry objects. This is (naturally) a risk, an update of the Poetry tool could break the functionality of the plugin.

A long-term goal is to make a Pull Request to the Poetry repository, making this kind of functionality available in there. If (when?) that is done, this plugin would no longer be necessary.

What's next? Any other commands?

Starting with the build-project command, and planning to add more custom commands that are relevant when using a project specific TOML file.

Maybe continue with a install-project command?

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

poetry-multiproject-plugin-0.2.0.tar.gz (5.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

poetry_multiproject_plugin-0.2.0-py3-none-any.whl (7.2 kB view details)

Uploaded Python 3

File details

Details for the file poetry-multiproject-plugin-0.2.0.tar.gz.

File metadata

  • Download URL: poetry-multiproject-plugin-0.2.0.tar.gz
  • Upload date:
  • Size: 5.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.1

File hashes

Hashes for poetry-multiproject-plugin-0.2.0.tar.gz
Algorithm Hash digest
SHA256 85c41d025d3f8f6793112de9cb93b21ba864fcd1887989aa08d0ba5676b4ff44
MD5 33d37f2cd6ed1fe33d47ccca85c2c6d9
BLAKE2b-256 b6a9d8d1c70efc86c6b25a354a7a63bbf1e5d2d094a4c5881de7eaee6dccf498

See more details on using hashes here.

File details

Details for the file poetry_multiproject_plugin-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: poetry_multiproject_plugin-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 7.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.1

File hashes

Hashes for poetry_multiproject_plugin-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e09673109a484d4ee1a637ae3f1f5c74264c76caa9a6dd867107f04cbe08947b
MD5 ca150b3d81c2bb284db4b15946e881e8
BLAKE2b-256 adf9a3b27234b830f139ce6695c8f5ba88f9594b0844d9075c5fdfc4c607f226

See more details on using hashes here.

Supported by

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