331 votes

Quel est l'équivalent de pip de `npm install package --save-dev`?

En nodejs, je peux faire npm install package --save-dev pour enregistrer le package installé dans le package.

Comment puis-je réalisé la même chose dans le gestionnaire de packages Python pip? Je voudrais enregistrer le nom du package et sa version dans, disons, requirements.pip juste après avoir installé le package en utilisant quelque chose comme pip install package --save-dev requirements.pip.

245voto

Ewan Points 3709

Il n'y a pas d'équivalent avec pip.

La meilleure façon 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 fige automatiquement votre fichier requirements.txt.

Édition 1

Depuis la rédaction de ceci, il n'y a pas eu de changement dans la fourniture d'une option automatique --save-dev similaire à NPM. Cependant, Kenneth Reitz (auteur de requests et bien d'autres) a publié des informations supplémentaires sur un meilleur flux de travail avec pip pour mieux gérer les mises à jour de pip.

Édition 2

Lié à l'article "meilleur flux de travail avec pip" ci-dessus, il est maintenant recommandé d'utiliser pipenv pour gérer les exigences et les environnements virtuels. Ayant beaucoup utilisé cela récemment, j'aimerais résumer à quel point la transition est simple :

Installer pipenv (sur Mac)

brew install pipenv

pipenv crée et gère ses propres environnements virtuels, donc dans un projet avec un fichier 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 le virtualenv pour exécuter des commandes est également facile

pipenv shell

L'installation des exigences mettra automatiquement à jour les fichiers Pipfile et Pipfile.lock

pipenv install 

Il est également possible de mettre à jour les packages obsolètes

pipenv update

Je recommande fortement de le consulter, surtout si vous venez d'un environnement npm, car il offre une expérience similaire à package.json et package-lock.json

91voto

Karim N Gorjux Points 1583

Cette ligne simple est un point de départ. Vous pouvez facilement construire 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 fonction bash simple:

function pip-install-save { 
    pip install $1 && pip freeze | grep $1 >> requirements.txt
}

Pour l'utiliser, il suffit d'exécuter :

pip-install-save some-package

10voto

Noortheen Raja Points 481

J'ai créé un package python qui enveloppe le véritable pip appelé pipm. Toutes les commandes de pip fonctionneront telles quelles, en plus d'être reflétées dans le fichier requirements. Contrairement à pip-save (inactif depuis un certain temps), un outil similaire que j'ai trouvé et que je n'ai pas pu utiliser, il peut gérer de nombreux fichiers et environnements (test, dev, production, etc.). Il a également une commande pour mettre à jour toutes/une partie de vos dépendances.

installation

pipm install nom-pkg

installation en tant que dépendance de développement

pipm install nom-pkg --dev

installation en tant que dépendance de test

pipm install nom-pkg --test

désinstallation

pipm uninstall nom-pkg

mettre à jour toutes vos dépendances

pipm update

installer toutes vos dépendances à partir du fichier requirements

pipm install

inclure les dépendances de développement

pipm install --dev

6voto

dskrvk Points 781

Mise à jour: apparemment, pipenv n'est pas officiellement soutenu par les responsables de Python, et la page précédemment liée est possédée par une organisation différente. L'outil a ses avantages et ses inconvénients, mais la solution ci-dessous permet toujours d'obtenir le résultat recherché par l'OP.

pipenv est un outil de gestion des dépendances qui enveloppe pip et fournit notamment ce que vous demandez:

https://pipenv.kennethreitz.org/en/latest/#example-pipenv-workflow

$ pipenv install

Cela créera un Pipfile s'il n'en existe pas encore. S'il en existe un, il sera automatiquement modifié avec le nouveau paquet que vous avez fourni.

Un Pipfile est l'équivalent direct de package.json, tandis que Pipfile.lock correspond à package-lock.json.

3voto

Ayman Jitan Points 749

Vous pouvez manuellement l'enregistrer dans un Makefile (ou un fichier texte puis l'importer dans votre Makefile):

PYTHON=.venv/bin/python # chemin vers python
PIP=.venv/bin/pip # chemin vers pip
SOURCE_VENV=. .venv/bin/activate

installation:
    virtualenv .venv
    $(SOURCE_VENV) && $(PIP) install -e PACKAGE
    $(SOURCE_VENV) && $(PIP) install -r requirements.txt # autres packages requis

et ensuite exécutez simplement make install

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X