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:
manual-requirements.txt
pip install -r manual-requirement.txt
_ (← problème, cela n’installe pas les dépendances)pip freeze -r manual-requirements.txt > full-requirements.txt
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.
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!
simplifily, utilisez:
pip install -r requirement.txt
il peut installer tous listés dans le fichier de conditions.
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 ):
$ pip install --upgrade pip # pip-tools needs pip==6.1 or higher (!)
$ pip install pip-tools
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.
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