web-dev-qa-db-fra.com

Indiquez à pip d'installer les dépendances des packages répertoriés dans un fichier d'exigences.

Développer une application web Django, j'ai une liste de paquets à installer dans un virtualenv. Dites:

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

Au départ, je les ai installées manuellement, une par une, tout au long du développement. Cela a installé les dépendances requises et j'ai finalement utilisé pip freeze avant de déployer l'application.

Le problème est que, lors de la mise à jour de certains paquets, certaines dépendances ne sont plus utilisées ni requises, mais restent listées par pip freeze.

Maintenant, je voudrais configurer un nouveau virtualenv de cette façon:

  • mettre les paquets nécessaires (sans leurs dépendances) dans un fichier d'exigences,
    comme manual-requirements.txt
  • installez les avec leurs dépendances
    pip install -r manual-requirement.txt _ (← problème, cela n’installe pas les dépendances)
  • geler le virtualenv complet
    pip freeze -r manual-requirements.txt > full-requirements.txt
    et déployer.

Tout moyen de le faire sans réinstaller manuellement les paquets dans un nouveau virtualenv pour obtenir leurs dépendances? Cela risquerait de générer des erreurs et j'aimerais automatiser le processus de nettoyage de virtualenv d'anciennes dépendances inutiles.

modifier: en fait, pip fait installer des dépendances non répertoriées explicitement dans le fichier de conditions requises, même si le documentation nous dit que ces fichiers sont à plat. Je me suis trompé sur les dépendances que je devais installer. Je laisserai cette question à ceux qui doutent que pip n'installe pas toutes les dépendances.

45
Maxime R.

Compte tenu de votre commentaire sur la question (où vous dites que l’exécution de l’installation pour un seul paquet fonctionne comme prévu), je suggérerais de parcourir en boucle votre fichier d’exigence. En bash:

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

HTH!

15
mac

simplifily, utilisez:

pip install -r requirement.txt

il peut installer tous listés dans le fichier de conditions.

50
Ming

Tout moyen de le faire sans réinstaller manuellement les paquets dans un nouveau virtualenv pour obtenir leurs dépendances? Cela risquerait de générer des erreurs et j'aimerais automatiser le processus de nettoyage de virtualenv d'anciennes dépendances inutiles.

Voilà à quoi sert le paquet pip-tools (à partir de https://github.com/nvie/pip-tools ):

Installation

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

Exemple d'utilisation pour pip-compile

Supposons que vous ayez un projet Flask) et que vous souhaitiez le bloquer pour la production. Écrivez la ligne suivante dans un fichier:

# requirements.in
Flask

Maintenant, lancez pip-compile Requirements.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

Et cela produira votre requirements.txt, avec toutes les dépendances Flask (et toutes les dépendances sous-jacentes) épinglées. Mettez également ce fichier sous contrôle de version et relancez-le périodiquement pip-compile pour mettre à jour les paquets.

Exemple d'utilisation pour pip-sync

Maintenant que vous avez un requirements.txt, vous pouvez utiliser pip-sync pour mettre à jour votre env virtuel afin de refléter exactement ce qu’il contient. Note: ceci installera/mettra à jour/désinstaller tout le nécessaire pour correspondre à la requirements.txt Contenu.

$ 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
26
Piotr Dobrogost