es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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.

Tags:  , , ,

Answer

  1. Avatar for 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. Con pip-tools, puede definir sus dependencias en un archivo requirements.in y generar un archivo requirements.txt con las versiones fijas. Luego, puede utilizar ese archivo requirements.txt como la fuente de verdad para sus dependencias de desarrollo tanto en poetry como en pre-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 archivo requirements-dev.txt con versiones fijas utilizando pip-compile:

    # requirements-dev.in
    black
    flake8
    isort
    mypy
    

    Luego, puede generar un archivo requirements-dev.txt con pip-compile:

    pip-compile requirements-dev.in
    

    Esto generará un archivo requirements-dev.txt con las versiones fijas para sus dependencias de desarrollo:

    # requirements-dev.txt
    black==21.11b1
    flake8==4.0.1
    isort==5.10.1
    mypy==0.910
    

    Luego, puede utilizar este archivo requirements-dev.txt como la fuente de verdad para sus dependencias de desarrollo. En poetry, puede agregarlo a su archivo pyproject.toml en la sección packages:

    # pyproject.toml
    [tool.poetry.dev-dependencies]
    -r requirements-dev.txt
    

    En pre-commit, puede agregarlo a su archivo .pre-commit-config.yaml en cada gancho que requiera dependencias de desarrollo:

    # .pre-commit-config.yaml
    repos:
      - repo: https://github.com/psf/black
        rev: 21.11b1
        hooks:
          - id: black
            additional_dependencies:
              - -r
              - /path/to/requirements-dev.txt
      - repo: https://github.com/pycqa/flake8
        rev: 4.0.1
        hooks:
          - id: flake8
            additional_dependencies:
              - -r
              - /path/to/requirements-dev.txt
      - repo: https://github.com/pycqa/isort
        rev: 5.10.1
        hooks:
          - id: isort
            additional_dependencies:
              - -r
              - /path/to/requirements-dev.txt
    

    Con este enfoque, solo necesita actualizar las dependencias de desarrollo en el archivo requirements-dev.in y regenerar el archivo requirements-dev.txt para actualizar sus dependencias de desarrollo en poetry y pre-commit.

Comments are closed.