web-dev-qa-db-fra.com

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

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.

142
hllau

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

138
Ewan

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
15
Karim N Gorjux

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.

3
dskrvk

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.

2
abhiomkar

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. 

installation

pipm install pkg-name

installation en tant que dépendance de développement

pipm install pkg-name --dev

installation comme dépendance de test

pipm install pkg-name --test

suppression

pipm uninstall pkg-name

mettre à jour toutes vos dépendances

pipm update

installez toutes vos dépendances à partir du fichier de configuration

pipm install

y compris les dépendances de développement

pipm install --dev

2
Noortheen Raja

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

0
Anthony Pierotti

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.

0
Anyany Pan

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

0
Evan Lévesque