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.