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 mantener actualizados los archivos de requisitos `requirements_*.txt` de tiempo de ejecución y desarrollo?

Me gustaría mantener varios archivos requirements*.txt actualizados mientras trabajo en un proyecto. Algunos paquetes en los que depende mi proyecto son necesarios durante la ejecución, mientras que otros solo son necesarios durante el desarrollo. Dado que estos paquetes pueden tener sus propias dependencias, es difícil determinar qué dependencia debería estar en qué archivo requirements*.txt.

Si quiero hacer un seguimiento de las dependencias de tiempo de ejecución en requirements_prod.txt y de las dependencias de desarrollo en requirements_dev.txt, ¿cómo puedo mantener ambos archivos actualizados y limpios si agrego paquetes durante el desarrollo? Simplemente ejecutar pip freeze > requirements_prod.txt listaría todas las dependencias instaladas, incluidas las que solo se necesitan para el desarrollo. Esto contaminaría cualquiera de los archivos requirements_*.txt.

Idealmente, me gustaría marcar un paquete en la instalación como ‘desarrollo’ o ‘tiempo de ejecución’ y que este (y sus propias dependencias) se escriban en el archivo requirements_*.txt correcto.

Edit:

@Brian: Mi pregunta es ligeramente diferente a esta pregunta porque me gustaría que mis archivos requirements_*.txt estén uno junto al otro en la misma rama, no en ramas diferentes. Así que mis archivos requirements_*.txt siempre deberían estar en los mismos commits.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para mantener varios archivos requirements*.txt actualizados mientras trabajas en un proyecto, un enfoque que podrías utilizar es el de utilizar entornos virtuales separados para entornos de desarrollo y producción. Esto asegura que solo los paquetes necesarios se instalan en cada entorno, y ayuda a mantener los archivos requirements_*.txt limpios y actualizados.

    Para lograr esto utilizando virtualenv y pip, sigue estos pasos:

    1. Crea entornos virtuales separados para tus entornos de desarrollo y producción. Por ejemplo, podrías crear un entorno virtual para desarrollo llamado “dev” y otro para producción llamado “prod”.
      virtualenv dev
      virtualenv prod
      
    2. Activa el entorno dev e instala cualquier dependencia solo de desarrollo usando pip install:
      source dev/bin/activate
      pip install -r requirements_dev.txt
      
    3. Activa el entorno prod e instala cualquier dependencia de tiempo de ejecución usando pip install:
      source prod/bin/activate
      pip install -r requirements_prod.txt
      
    4. Cuando agregues un nuevo paquete durante el desarrollo, instálalo usando pip install --editable e indica si es una dependencia de desarrollo o de tiempo de ejecución utilizando las banderas -e y -r:
      pip install --editable . -r requirements_dev.txt   # para dependencias de desarrollo
      pip install --editable . -r requirements_prod.txt  # para dependencias de tiempo de ejecución
      

      Esto instalará el paquete como paquete editable y lo agregará como un requisito al archivo requirements_*.txt apropiado, dependiendo de si es una dependencia de desarrollo o de tiempo de ejecución.

    5. Cuando estés listo para implementar en producción, activa el entorno prod e instala todos los paquetes necesarios usando pip install -r requirements_prod.txt.

    Al utilizar entornos virtuales separados para desarrollo y producción e instalar intencionalmente las dependencias en cada entorno, puedes mantener tus archivos requirements_*.txt limpios y actualizados. Además, este enfoque te permite cambiar fácilmente entre entornos de desarrollo y producción sin tener conflictos de dependencias.

Comments are closed.