python pip requirements.txt

python - dile a pip que instale las dependencias de los paquetes listados en un archivo de requisitos



requirements.txt (3)

¿Alguna forma de hacerlo sin tener que volver a instalar manualmente los paquetes en un nuevo virtualenv para obtener sus dependencias? Esto sería propenso a errores y me gustaría automatizar el proceso de limpieza de virtualenv de antiguas dependencias que ya no son necesarias.

Para eso está el paquete de pip-tools (de https://github.com/nvie/pip-tools ):

Instalación

$ pip install --upgrade pip # pip-tools needs pip==6.1 or higher (!) $ pip install pip-tools

Ejemplo de uso para pip-compile

Supongamos que tiene un proyecto Flask y desea fijarlo para producción. Escriba la siguiente línea en un archivo:

# requirements.in Flask

Ahora, ejecute los requisitos pip-compile.in:

$ pip-compile requirements.in # # This file is autogenerated by pip-compile # Make changes in requirements.in, then run this to update: # # pip-compile requirements.in # flask==0.10.1 itsdangerous==0.24 # via flask jinja2==2.7.3 # via flask markupsafe==0.23 # via jinja2 werkzeug==0.10.4 # via flask

Y generará su requirements.txt , con todas las dependencias de Flask (y todas las dependencias subyacentes) ancladas. Ponga este archivo también bajo control de versión y periódicamente vuelva a ejecutar pip-compile para actualizar los paquetes.

Ejemplo de uso para pip-sync

Ahora que tiene un requirements.txt , puede usar pip-sync para actualizar su entorno virtual y reflejar exactamente lo que hay allí. Nota: esto instalará / actualizará / desinstalará todo lo necesario para que coincida con el contenido de requirements.txt .

$ pip-sync Uninstalling flake8-2.4.1: Successfully uninstalled flake8-2.4.1 Collecting click==4.1 Downloading click-4.1-py2.py3-none-any.whl (62kB) 100% |████████████████████████████████| 65kB 1.8MB/s Found existing installation: click 4.0 Uninstalling click-4.0: Successfully uninstalled click-4.0 Successfully installed click-4.1

Desarrollando una aplicación web de Django, tengo una lista de paquetes que necesito instalar en un virtual. Decir:

Django==1.3.1 --extra-index-url=http://dist.pinaxproject.com/dev/ Pinax==0.9b1.dev10 git+git://github.com/pinax/pinax-theme-bootstrap.git@cff4f5bbe9f87f0c67ee9ada9aa8ae82978f9890 # and other packages

Inicialmente los instalé manualmente, uno por uno, a lo largo del desarrollo. Esto instaló las dependencias requeridas y finalmente usé pip freeze antes de implementar la aplicación.

El problema es que, al actualizar algunos paquetes, algunas dependencias ya no se usan ni se requieren, pero siguen apareciendo en la lista por pip freeze .

Ahora, me gustaría configurar un nuevo virtualenv de esta manera:

  • poner los paquetes necesarios (sin sus dependencias) en un archivo de requisitos,
    como manual-requirements.txt
  • instalarlos con sus dependencias
    pip install -r manual-requirement.txt (problema ←, esto no instala las dependencias)
  • congelar el virtualenv completo
    pip freeze -r manual-requirements.txt > full-requirements.txt
    y desplegar.

¿Alguna forma de hacerlo sin tener que volver a instalar manualmente los paquetes en un nuevo virtualenv para obtener sus dependencias? Esto sería propenso a errores y me gustaría automatizar el proceso de limpieza de virtualenv de antiguas dependencias que ya no son necesarias.

editar: en realidad, pip instala dependencias que no figuran explícitamente en el archivo de requisitos, incluso si la documentación nos dice que dichos archivos son planos. Estaba equivocado sobre las dependencias que esperaba instalar. Dejaré esta pregunta para cualquier persona en duda sobre pip no instalando todas las dependencias.


Dado su comentario a la pregunta (donde dice que la ejecución de la instalación de un solo paquete funciona como se esperaba), le sugiero que haga un bucle sobre su archivo de requisitos. En bash:

#!/bin/sh while read p; do pip install $p done < requirements.pip

HTH!


simplificadamente, use:

pip install -r requirement.txt

puede instalar todos los listados en el archivo de requisitos.