dites à pip d'installer les dépendances des paquets listés dans un fichier d'exigences

En développant une application web Django, j'ai une liste de paquets que je dois 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és manuellement, un par un, le 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, comme j'ai mis à jour certains paquets, certaines dépendances ne sont plus utilisées ni requises, mais elles continuent d'être listées par pip freeze.

Maintenant, je voudrais mettre en place un nouveau virtualenv ceci façon:

  • placez les paquets nécessaires (sans leurs dépendances) dans un fichier d'exigence,
    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 plein virtualenv
    pip freeze -r manual-requirements.txt > full-requirements.txt
    et à déployer.

Un moyen de le faire sans réinstaller manuellement les paquets dans un nouveau virtualenv pour obtenir leurs dépendances ? Ce serait sujet aux erreurs et je voudrais automatiser le processus de nettoyage du virtualenv des anciennes dépendances qui ne sont plus nécessaires.

Edit: en fait, pip installe des dépendances qui ne sont pas explicitement listées dans le fichier d'exigence, même si la documentation nous indique que ces fichiers sont plats. J'avais tort sur les dépendances que je m'attendais à installer. Je vais laisser cette question pour toute personne dans le doute sur pip ne pas installer toutes les dépendances.

32
demandé sur Vadim Kotov 2012-04-26 16:52:45

3 réponses

Compte tenu de votre commentaire à la question (où vous dites que l'exécution de l'installation pour un seul paquet fonctionne comme prévu), je suggère de boucler votre fichier d'exigence. En bash:

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

HTH!

12
répondu mac 2012-04-26 14:11:41

Simplifieusement, utilisez:

pip install -r requirement.txt

Il peut installer tous énumérés dans le fichier d'exigence.

45
répondu Ming 2013-01-06 12:35:37

Un moyen de le faire sans réinstaller manuellement les paquets dans un nouveau virtualenv pour obtenir leurs dépendances ? Ce serait sujet aux erreurs et je voudrais automatiser le processus de nettoyage du virtualenv des anciennes dépendances qui ne sont plus nécessaires.

C'est à 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 le pep-compiler

Supposons que vous ayez un flacon projet, et veulent l'épingler pour la production. Écrivez la ligne suivante dans un fichier:

# requirements.in
Flask

Maintenant, exécutez 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 il 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 réexécutez 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 virtuel env pour refléter exactement ce qui est là. Remarque: cela va installer / mettre à niveau / désinstaller tout le nécessaire pour correspondre au contenu 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
22
répondu Piotr Dobrogost 2016-02-15 14:03:03