A Heroku Buildpack for Poetry users.
The Python Poetry Buildpack prepares the build to be processed by a Python buildpack such as heroku/python
by generating requirements.txt
and runtime.txt
from poetry.lock
. With that said, your repo cannot have a requirements.txt
, it will be exported from Poetry (for runtime.txt
see below).
To set up the use of several buildpacks from the Heroku CLI use buildpacks:add
:
app="customer-data-service-dev"
heroku buildpacks:clear --app $app
heroku buildpacks:add https://github.com/zensum/python-poetry-buildpack.git --app $app
heroku buildpacks:add heroku/python --app $app
Python version can be forced by setting the PYTHON_RUNTIME_VERSION
variable. Otherwise, it will be read from poetry.lock
; for using Heroku default see below.
heroku config:set PYTHON_RUNTIME_VERSION=3.9.1
Poetry version can be specified by setting POETRY_VERSION
in Heroku config vars. Otherwise, it will default to a hardcoded version.
heroku config:set POETRY_VERSION=1.1.13
Generally all variables starting with POETRY_
are passed on to Poetry by this buildpack; see the corresponding Poetry documentation section for possible uses.
Exporting of development dependencies (e.g. to run tests in CI pipelines) can be optionally enabled by setting POETRY_EXPORT_DEV_REQUIREMENTS
to 1
:
heroku config:set POETRY_EXPORT_DEV_REQUIREMENTS=1
If you want to override the default export parameters (--without-hashes --with-credentials
), you can set the POETRY_EXPORT_PARAMS
config var. For example, you can use --with-hashes
for added security, if you don't need git dependencies. This option is compatible with POETRY_EXPORT_DEV_REQUIREMENTS
config var documented above.
heroku config:set POETRY_EXPORT_PARAMS=--with-hashes
Generation of the runtime.txt
can be skipped by setting DISABLE_POETRY_CREATE_RUNTIME_FILE
to 1
:
heroku config:set DISABLE_POETRY_CREATE_RUNTIME_FILE=1
If DISABLE_POETRY_CREATE_RUNTIME_FILE
is set, the required Python version can be specified in runtime.txt
. Otherwise, if runtime.txt
is present in the repository, the buildpack will prevent the app from being deployed in order to avoid possible ambiguities.
To test your changes locally run the (TAP-compatible) test suite:
bash run_tests.sh