Skip to main content

Automatically create requirements.txt on every poetry lock

Project description

poetry-auto-export

Automatically export dependencies to requirements.txt on every poetry lock

This plugin enables you to keep a requirements.txt file always up to date with your poetry.lock file. This is helpful if you want to use pip to install your dependencies somewhere, e.g.

  • in CI/CD environments
  • in docker containers

Usage

Add plugin configuration to your pyproject.toml. The options follow arguments for poetry export.

[tool.poetry-auto-export]
output = "requirements.txt"
without_hashes = true
without = ["dev"]

Then, run poetry commands as usual:

poetry lock

The requirements.txt file will be updated automatically.

The supported commands are:

  • lock
  • update
  • add
  • remove

Detect lock file changes

Suppose you're working on a project with CI/CD and several contributors. You want the CI/CD to depend on the requirements.txt file created by poetry-auto-export, but you need to make sure everyone updates the requirements.txt file correctly.

To make this easy, poetry-auto-export puts a SHA1 hash in a comment on top of requirements.txt file. In CI/CD you can quickly compute the hash and compare that with the comment without installing poetry or any other dependencies.

Here is an example python script that does this:

import hashlib
from pathlib import Path

lock_hash = hashlib.sha1(Path("poetry.lock").read_bytes()).hexdigest()
first_line = Path("requirements.txt").read_text().split("\n")[0]

if first_line != f"# poetry.lock hash: {lock_hash}":
    raise ValueError("requirements.txt is out of date, use the `poetry-auto-export` plugin to update it!")

A more fancy version of the above script is shipped with this package as check_requirements_file.py. You can also download it from the Github repository directly, e.g.

curl -O https://raw.githubusercontent.com/Ddedalus/poetry-auto-export/refs/heads/main/poetry_auto_export/check_requirements_file.py

Or pipe straight into python, for a quick one-liner:

curl -sSL https://raw.githubusercontent.com/Ddedalus/poetry-auto-export/refs/heads/main/poetry_auto_export/check_requirements_file.py | python3 -

Creating multiple export files

If you need to create multiple requirements files, e.g. dev-requirements.txt and prod-requirements.txt, use the following syntax:

[[tool.poetry-auto-export.exports]]
output = "dev-requirements.txt"
without = ["prod"]

[[tool.poetry-auto-export.exports]]
output = "prod-requirements.txt"
without = ["dev"]

Installation

This is a poetry plugin, so it's meant to be installed inside the global poetry environment, not your project environment like regular pacakges. See poetry's docs.

There are three ways of doing so.

The pipx way

If you are using pipx already, that's easy:

pipx inject poetry poetry-auto-export

The pip way

Otherwise, you can use the pip that comes with poetry. The difficulty is finding that pip! It's not the same one you get with poetry run pip. Here is a best effort guess:

On Linux:

~/.local/share/pypoetry/venv/bin/pip install poetry-auto-export

On Windows:

%APPDATA%\pypoetry\venv\bin\pip install poetry-auto-export

The poetry way

For some reason, this is discouraged by poetry.

poetry self add poetry-auto-export

Roadmap and contributing

The primary goal of the project is to make it more convenient to work with poetry projects in CI/CD and docker. Contributions towards this goal are welcome!

Roadmap:

  • more unit tests for the plugin
  • integration tests for the plugin
  • proper configuration parsing (note: typed dict and dataclasses can't support the with option, since it's a python keyword)
  • schema or exhaustive documentation of the supported configuration options

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_auto_export-0.4.0.tar.gz (5.3 kB view details)

Uploaded Source

Built Distribution

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

poetry_auto_export-0.4.0-py3-none-any.whl (7.0 kB view details)

Uploaded Python 3

File details

Details for the file poetry_auto_export-0.4.0.tar.gz.

File metadata

  • Download URL: poetry_auto_export-0.4.0.tar.gz
  • Upload date:
  • Size: 5.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.1 CPython/3.12.3 Linux/6.8.0-1021-azure

File hashes

Hashes for poetry_auto_export-0.4.0.tar.gz
Algorithm Hash digest
SHA256 4ea9f70e500d2dc54026b8d407c7848b62b730e268294537974d9e4ad3510e8f
MD5 f154869415de596708651fb50c87b54a
BLAKE2b-256 d631333f68039baeed189e6056c27852625480cc97b6b815d02a89068fe9d742

See more details on using hashes here.

File details

Details for the file poetry_auto_export-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: poetry_auto_export-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 7.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.1 CPython/3.12.3 Linux/6.8.0-1021-azure

File hashes

Hashes for poetry_auto_export-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 83697cf6367245f64feacaf4a2143c32ee8b7e0ee30bbef661e9a1a75637fe7b
MD5 c462ea9e960ece4d1cc9a0716e4d89a7
BLAKE2b-256 248df22e2d0571e71d01af84e98e33330f28a6bb02be3a86fd4d26f5b95d57d4

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