Dans nodejs, je peux faire npm install package --save-dev
pour enregistrer le package installé dans le package.
Comment puis-je obtenir la même chose dans le gestionnaire de paquets Python pip
? J'aimerais enregistrer le nom du paquet et sa version, par exemple, requirements.pip
juste après avoir installé le paquet en utilisant quelque chose comme pip install package --save-dev requirements.pip
.
Il n'y a pas d'équivalent avec pip
.
Le meilleur moyen est de pip install package && pip freeze > requirements.txt
Vous pouvez voir toutes les options disponibles sur leur page de documentation .
Si cela vous dérange vraiment, il ne serait pas trop difficile d'écrire un script bash personnalisé (pips
) qui prend un argument -s
et se fige automatiquement dans votre fichier requirements.txt
.
Éditer 1
Depuis l’écriture de ce texte, aucune option --save-dev
automatique similaire à NPM n’a été apportée, mais Kenneth Reitz (auteur de requests
et bien d’autres) a publié quelques informations supplémentaires sur un meilleur flux de travail de pip pour mieux gérer les mises à jour de pip
. .
Éditer 2
Lié à partir de l'article "Better Pip Workflow" ci-dessus, il est maintenant recommandé d'utiliser pipenv
pour gérer les exigences et les environnements virtuels. Ayant beaucoup utilisé ces outils récemment, je voudrais résumer à quel point la transition est simple:
Installez pipenv
(sur Mac)
brew install pipenv
pipenv
crée et gère ses propres environnements virtuels. Ainsi, dans un projet avec un requirements.txt
existant, l'installation de toutes les exigences (j'utilise Python3.7 mais vous pouvez supprimer le --three
si vous ne le faites pas) est aussi simple que :
pipenv --three install
Activer virtualenv pour exécuter des commandes est également facile
pipenv Shell
L'installation requise va automatiquement mettre à jour les Pipfile
et Pipfile.lock
pipenv install <package>
Il est également possible de mettre à jour des paquetages obsolètes
pipenv update
Je recommande fortement en le vérifiant surtout si vous venez d'un fond npm
car il a la même sensation que package.json
et package-lock.json
Cette simple ligne est un point de départ. Vous pouvez facilement créer une commande bash pour réutiliser le PACKAGE dans la ligne.
pip install PACKAGE && pip freeze | grep PACKAGE >> requirements.txt
Merci à @devsnd pour l’exemple de la fonction bash simple:
function pip-install-save {
pip install $1 && pip freeze | grep $1 >> requirements.txt
}
Pour l'utiliser, lancez simplement:
pip-install-save some-package
La page Gestion des dépendances d'application de Python recommande maintenant pipenv comme outil de gestion des dépendances. Il englobe pip
et fournit notamment ce que vous demandez:
https://docs.pipenv.org/basics/#example-pipenv-workflow
$ pipenv install <package>
Cela créera un Pipfile s'il n'en existe pas. S'il en existe un, il sera automatiquement édité avec le nouveau package fourni.
Pipfile
est un équivalent direct de package.json
, tandis que Pipfile.lock
correspond à package-lock.json
.
J'ai fait un hack rapide sur pip
pour ajouter l'option --save
afin d'installer/désinstaller des commandes.
Veuillez consulter mon blog pour plus d'informations sur ce hack: http://blog.abhiomkar.in/2015/11/12/pip-save-npm-like-behaviour-to-pip/
Installation (GitHub): https://github.com/abhiomkar/pip-save
J'espère que cela t'aides.
J'ai créé un paquet python qui englobe la pip
appelée pipm . Toutes les commandes pip
fonctionneront telles quelles, elles seront également reflétées dans le fichier de configuration requise. Contrairement à pip-save
(outil similaire que j'ai trouvé et que je n'ai pas pu utiliser), il peut gérer plusieurs fichiers et environnements (test, développement, production, etc.). Il a également la commande de mettre à jour toutes vos dépendances.
pipm install pkg-name
pipm install pkg-name --dev
pipm install pkg-name --test
pipm uninstall pkg-name
pipm update
pipm install
pipm install --dev
J'utilise cette petite ligne de commande pour installer un package et enregistrer sa version dans requirements.txt
: pkg=package && pip install $pkg && echo $(pip freeze | grep -i $pkg) >> requirements.txt
Pourquoi ne pas créer une fonction Shell pour cela? Ajouter le code ci-dessous à votre ~/.profile
ou ~/.bashrc
pips() {
local pkg=$1
if [ -z "$1" ]; then
echo "usage: pips <pkg name>"
return 1
fi
local _ins="pip install $pkg"
eval $_ins
pip freeze | grep $pkg -i >> requirements.txt
}
puis exécutez source ~/.profile
ou source ~/.bashrc
pour l'importer sur votre terminal actuel
lorsque vous souhaitez installer && enregistrer un package, exécutez simplement, par exemple, pips requests
. après l'installation du package, sa version sera enregistrée dans requirements.txt
dans votre répertoire actuel.
vous pouvez manuellement l'enregistrer dans un Makefile (ou un fichier texte importé dans votre Makefile)
PYTHON=.venv/bin/python # path to pyphon
PIP=.venv/bin/pip # path to pip
SOURCE_VENV=. .venv/bin/activate
install:
virtualenv .venv
$(SOURCE_VENV) && $(PIP) install -e PACKAGE
$(SOURCE_VENV) && $(PIP) install -r requirements.txt # other required packages
et lancez simplement make install