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,
commemanual-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.
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!
Simplifieusement, utilisez:
pip install -r requirement.txt
Il peut installer tous énumérés dans le fichier d'exigence.
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