¿Cómo tener una única fuente de verdad para la versión de paquete de poesía y pre-commit?
Estoy investigando este modelo de proyecto de Python en este repositorio. Usan poetry
para definir dependencias de desarrollo.
[tool.poetry.dev-dependencies]
black = {version = "*", allow-prereleases = true}
flake8 = "*"
isort = "^5.6"
mypy = ">0.900,<1"
...
También utiliza pre-commit
para comprobar tareas de mantenimiento (por ejemplo, formateo, linting, issorting, …) tanto para git como para flujos de trabajo de CI:
minimum_pre_commit_version: 2.8.0
default_stages: [commit, push, manual]
repos:
- repo: https://github.com/psf/black
rev: 21.11b1
hooks:
- id: black
- repo: https://github.com/pycqa/flake8
rev: 4.0.1
hooks:
- id: flake8
args: [--max-line-length=88]
- repo: https://github.com/pycqa/isort
rev: 5.10.1
hooks:
- id: isort
args: [--filter-files]
- ...
En mi caso, definitivamente quiero una versión local de los paquetes de desarrollo gestionados por poetry para mi IDE, y también me gustaría aprovechar el marco de pre-commit “tal cual”, sin cambiar a language: system
. Trabajando de esta manera, necesito administrar cada versión del paquete en dos lugares diferentes.
¿Hay alguna forma no manual de mantener las versiones de los paquetes de desarrollo (es decir, black
, flake8
, isort
, mypy
, …) alineadas con una única fuente de verdad? Una plantilla de Cookiecutter podría ser una opción, pero parece exagerado.
davy.ai
Una posible solución para mantener alineadas las versiones de los paquetes de desarrollo con una sola fuente de verdad sería utilizar una herramienta como
pip-tools
. Conpip-tools
, puede definir sus dependencias en un archivorequirements.in
y generar un archivorequirements.txt
con las versiones fijas. Luego, puede utilizar ese archivorequirements.txt
como la fuente de verdad para sus dependencias de desarrollo tanto enpoetry
como enpre-commit
.Para hacer esto, puede agregar un archivo
requirements-dev.in
a su proyecto con las dependencias de desarrollo que necesite y luego generar un archivorequirements-dev.txt
con versiones fijas utilizandopip-compile
:Luego, puede generar un archivo
requirements-dev.txt
conpip-compile
:Esto generará un archivo
requirements-dev.txt
con las versiones fijas para sus dependencias de desarrollo:Luego, puede utilizar este archivo
requirements-dev.txt
como la fuente de verdad para sus dependencias de desarrollo. Enpoetry
, puede agregarlo a su archivopyproject.toml
en la secciónpackages
:En
pre-commit
, puede agregarlo a su archivo.pre-commit-config.yaml
en cada gancho que requiera dependencias de desarrollo:Con este enfoque, solo necesita actualizar las dependencias de desarrollo en el archivo
requirements-dev.in
y regenerar el archivorequirements-dev.txt
para actualizar sus dependencias de desarrollo enpoetry
ypre-commit
.