Qual è l'equivalente di pip di `npm install package --save-dev`?


199

In nodejs, posso fare npm install package --save-devper salvare il pacchetto installato nel pacchetto.

Come ottengo la stessa cosa nel gestore dei pacchetti Python pip? Vorrei salvare il nome del pacchetto e la sua versione, ad esempio, requirements.pipsubito dopo aver installato il pacchetto usando qualcosa di simile pip install package --save-dev requirements.pip.


4
pip freeze > requirements.pip
falsetru,

5
Questo non è lo stesso npm install package --save-devcombina contemporaneamente l'installazione e l'aggiunta al file dei requisiti node_npm. È più utile. Con pip freezedevo fare due comandi per fare la stessa cosa: 1) pip install package2)pip freeze > requirements.pip
hllau,

1
Pip ha problemi con l' --saveopzione.
Rutsky,

Se utilizzo setup.py per i requisiti, ho creato un piccolo modulo per bloccare le versioni del pacchetto in setup.py.
AdamGold

Risposte:


164

Non c'è un equivalente con pip.

Il modo migliore è quello di pip install package && pip freeze > requirements.txt

Puoi vedere tutte le opzioni disponibili sulla loro pagina di documentazione .

Se ti dà davvero fastidio, non sarebbe troppo difficile scrivere uno script bash personalizzato ( pips) che accetta un -sargomento e si blocca requirements.txtautomaticamente sul tuo file.

Modifica 1

Da quando ho scritto questo non c'è stato alcun cambiamento nel fornire --save-devun'opzione automatica simile a NPM, tuttavia Kenneth Reitz (autore di requestse molti altri) ha rilasciato alcune ulteriori informazioni su un flusso di lavoro pip migliore per gestire meglio gli pipaggiornamenti.

Modifica 2

Collegato dall'articolo "flusso di lavoro pip migliore" sopra, ora è consigliabile utilizzare pipenvper gestire requisiti e ambienti virtuali. Avendolo usato molto di recente, vorrei riassumere quanto sia semplice la transizione:

Installa pipenv(su Mac)

brew install pipenv

pipenvcrea e gestisce i propri ambienti virtuali, quindi in un progetto con un esistente requirements.txt, l'installazione di tutti i requisiti (utilizzo Python3.7 ma è possibile rimuoverlo --threese non lo fa) è semplice come:

pipenv --three install

Anche l'attivazione di virtualenv per eseguire i comandi è semplice

pipenv shell

L'installazione dei requisiti aggiornerà automaticamente PipfileePipfile.lock

pipenv install <package>

È anche possibile aggiornare pacchetti obsoleti

pipenv update

Consiglio vivamente di provarlo soprattutto se proviene da uno npmsfondo in quanto ha un'atmosfera simile a package.jsonepackage-lock.json


22
Si noti che ciò salverà anche le dipendenze delle dipendenze che nel tempo potrebbero non essere più necessarie perché la dipendenza ne ha abbandonato l'uso.
Patrick Bassut,

Questo non sembra affrontare l'aspetto --save-dev della domanda originale che consente di avere dipendenze diverse per lo sviluppo locale rispetto alla produzione. Come puoi ottenerlo con Pipenv?
jeznag

1
@jeznag pipenvti consente di specificare un dev-packagesnel tuo Pipfilee / o usare --dev(o -d) dalla riga di comando. ad es.pipenv install --dev nose2
Ewan il

39

Questa semplice linea è un punto di partenza. È possibile creare facilmente un comando bash per riutilizzare il PACCHETTO nella riga.

pip install PACKAGE && pip freeze | grep PACKAGE >> requirements.txt

Grazie a @devsnd per il semplice esempio della funzione bash:

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

Per usarlo, basta eseguire:

pip-install-save some-package

I miei cinque centesimiP=Flask pip install $P && pip freeze | grep $P >> requirements.txt
GBrian

4

Ho creato un pacchetto Python che avvolge l'effettivo pipmpip chiamato . Tutti i comandi funzioneranno così come sono, inoltre si rifletteranno nel file dei requisiti. A differenza di (uno strumento simile che ho trovato e che non sono stato in grado di utilizzare) può gestire molti file e ambienti (test, sviluppo, produzione, ecc.). Ha anche il comando di aggiornare tutte le tue dipendenze.pippip-save

installazione

pipm install pkg-name

installazione come dipendenza dallo sviluppo

pipm install pkg-name --dev

installazione come dipendenza da test

pipm install pkg-name --test

rimozione

pipm uninstall pkg-name

aggiorna tutte le tue dipendenze

pipm update

installa tutte le tue dipendenze dal file dei requisiti

pipm install

comprese le dipendenze di sviluppo

pipm install --dev


3

Aggiornamento: apparentemente, pipenv non è ufficialmente approvato dai manutentori di Python e la pagina precedentemente collegata è di proprietà di un'altra organizzazione. Lo strumento ha i suoi pro e contro, ma la soluzione di seguito raggiunge ancora il risultato che l'OP sta cercando.

pipenv è uno strumento di gestione delle dipendenze che avvolge pipe, tra le altre cose, fornisce ciò che stai chiedendo:

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

$ pipenv install <package>

Questo creerà un Pipfile se non esiste. Se ne esiste uno, verrà automaticamente modificato con il nuovo pacchetto fornito.

A Pipfileè un equivalente diretto di package.json, mentre Pipfile.lockcorrisponde a package-lock.json.



1

puoi salvarlo manualmente in un Makefile (o in un file di testo e quindi importato nel tuo 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

e poi corri make install


Sono totalmente d'accordo con questo approccio.
Eleijonmarck,

1

Sto usando questa piccola riga di comando per installare un pacchetto e salvarne la versione in requirements.txt: pkg=package && pip install $pkg && echo $(pip freeze | grep -i $pkg) >> requirements.txt


0

Che ne dici di fare una funzione shell per fare questo? Aggiungi sotto il codice al tuo ~/.profileo~/.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
}

quindi esegui source ~/.profileo source ~/.bashrcper importarlo nel tuo terminale corrente

quando vuoi installare && salvare un pacchetto, esegui, per esempio pips requests. dopo l'installazione del pacchetto, la sua versione verrà salvata nella requirements.txtdirectory corrente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.