A Poetry plugin that makes it possible to use relative package includes.
Project description
Poetry Multiproject Plugin
This is a Python Poetry
plugin, adding the build-project
and check-project
commands.
The build-project
command will make it possible to use relative package includes.
This feature is very useful for monorepos and when sharing code between projects.
The check-project
command is useful to check that dependencies are added properly in a project.
It uses the MyPy
tool under the hood, and will output any errors from the static type checker.
Usage
Navigate to the project folder (where the pyproject.toml
file is).
Build a project:
poetry build-project
Check the code used in a project:
poetry check-project
Check the code, with a custom MyPy
configuration to override the defaults:
poetry check-project --config-file <PATH-TO-MYPY.INI-CONFIG-FILE>
Installation
This plugin can be installed according to the official Poetry docs.
poetry self add poetry-multiproject-plugin
What does it do?
the poetry build-project
command will:
- copy the actual project into a temporary folder.
- collect relative includes - such as
include = "foo/bar", from = "../../shared"
- and copy them into the temprary folder. - generate a new pyproject.toml.
- run the
poetry build
command in the temporary folder. - copy the built
dist
folder (containing the wheel and sdist) into the actual project folder. - remove the temporary folder.
the poetry check-project
command will:
- copy the actual project into a temporary folder.
- collect relative includes - such as
include = "foo/bar", from = "../../shared"
- and copy them into the temprary folder. - generate a new pyproject.toml.
- run
poetry install
in the temporary folder. - run
poetry run mypy
in the temporary folder. - remove the temporary folder.
The default setting for the underlying MyPy
configuration is:
--explicit-package-bases --namespace-packages --no-error-summary --no-color-output
How is it different from the "poetry build" command?
Poetry does not allow package includes outside of the project root.
# Note the structure of the shared folder: namespace/package
packages = [
{ include = "my_namespace/my_package", from = "../../shared" }
{ include = "my_namespace/my_other_package", from = "../../shared" }
]
This plugin will allow relative package includes. You will now be able to share code between projects.
An suggested Monorepo structure, with the shared code extracted into a separate folder structure:
projects/
my_app/
pyproject.toml (including a shared package)
my_service/
pyproject.toml (including other shared packages)
shared/
my_namespace/
my_package/
__init__.py
code.py
my_other_package/
__init__.py
code.py
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
Hashes for poetry_multiproject_plugin-1.1.2.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1c55d077ac3e76a61336d5e56fa68b84306115397bb5e61c20f6fee117f4a836 |
|
MD5 | d8e4911ecf63d94622496ab351bb8fdf |
|
BLAKE2b-256 | d4b6f90ff22d1d3e0269ef3c7ac68343f44c8f8820e952b3ee217adb62f58991 |
Hashes for poetry_multiproject_plugin-1.1.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e1b7cf50b4c3eb44e4df0edd78b73fd8ebc4a4c4875900523e7d38b641ee84bb |
|
MD5 | 1d2cfdbe35c09fb9f589c3deb27cd52f |
|
BLAKE2b-256 | 81d885de20d87fcb598471d21927fc4e45589520d07bff80ce5fc39e267a2d43 |