Pip freeze contro pip list


111

Un confronto degli output rivela differenze:

user@user-VirtualBox:~$ pip list
feedparser (5.1.3)
pip (1.4.1)
setuptools (1.1.5)
wsgiref (0.1.2)
user@user-VirtualBox:~$ pip freeze
feedparser==5.1.3
wsgiref==0.1.2

La documentazione di Pip afferma

freeze                      Output installed packages in requirements format.
list                        List installed packages.

ma cos'è il "formato dei requisiti" e perché pip listgenera un elenco più completo di pip freeze?


5
Cordiali saluti, ecco i documenti .
alecxe

Risposte:


109

Quando si utilizza a virtualenv, è possibile specificare un requirements.txtfile per installare tutte le dipendenze.

Un utilizzo tipico:

$ pip install -r requirements.txt

I pacchetti devono essere in un formato specifico per pipessere compreso, ovvero

feedparser==5.1.3
wsgiref==0.1.2
django==1.4.2
...

Questo è il "formato dei requisiti".

Qui, django==1.4.2implica la djangoversione di installazione 1.4.2(anche se l'ultima è 1.6.x). Se non si specifica ==1.4.2, verrà installata l'ultima versione disponibile.

Puoi leggere di più in " Virtualenv e pip Basics " e nella documentazione ufficiale " Requirements File Format ".


5
Fatto. C'è qualche motivo particolare per cui "list" produce un elenco più completo di "freeze"?
nitrl

2
Penso che sia perché pip listelenca tutto e pip freezeinstalla tutto ciò che è installato da pip.
karthikr

Hm, questa è una teoria, ma sono abbastanza sicuro di no pip install wsgiref.
nitrl

Python 3.2 include wsgiref.egg-infonella directory Lib, motivo per cui pip lo sa. Non è possibile [disinstallarlo] con pip e le versioni successive di Python omettono il file di metadati in modo che non venga visualizzato.
Zooba

1
@leonid se ti sbarazzi del numero di versione alla fine, installerà l'ultima versione da pypi. Leggi la risposta completamente
karthikr

42

Per rispondere alla seconda parte di questa domanda, i due pacchetti mostrati in pip listma non pip freezesono setuptools(che è easy_install) e pipse stesso.

Sembra che pip freezesemplicemente non elenchi i pacchetti da cui pip dipende. Puoi usare il --allflag per mostrare anche quei pacchetti.

Dalla documentazione :

--all

Non saltare questi pacchetti nell'output: pip, setuptools, distribute, wheel


3
pip freezeha un'opzione --allper mostrare anche: pip, setuptools, distribute, wheel pip.pypa.io/en/stable/reference/pip_freeze
Chananel P

meno distribuire
Max Kleiner

37

La differenza principale è che l'output di pip freezepuò essere scaricato in un file requirements.txt e utilizzato successivamente per ricostruire l'ambiente "congelato".

In altre parole puoi eseguire: pip freeze > frozen-requirements.txtsu una macchina e poi su una macchina diversa o in un ambiente pulito puoi farlo: pip install -r frozen-requirements.txt e otterrai un ambiente identico con le stesse identiche dipendenze installate nell'ambiente originale in cui ha generato il frozen-requirements.txt.


26

Guarda la documentazione pip , che descrive la funzionalità di entrambi come:

elenco pip

Elenca i pacchetti installati, inclusi gli elementi modificabili.

pip congelamento

Emette i pacchetti installati nel formato dei requisiti.

Quindi ci sono due differenze:

  1. Formato di output, freezeci fornisce il formato dei requisiti standard che può essere utilizzato in seguito pip install -rper installare i requisiti da.

  2. Contenuto di output, pip listincludere modificabili che pip freezenon lo fanno.


cosa si intende per modificabili?
Mr. Suryaa Jha,


6

pip listmostra TUTTI i pacchetti installati.

pip freezemostra i pacchetti che hai installato tramite pip(o pipenvse utilizzi quello strumento) il comando in un formato di requisiti.

Nota sotto che setuptools , pip , wheel sono installati quando pipenv shellcrea la mia busta virtuale. Questi pacchetti NON sono stati installati da me utilizzando pip:

test1 % pipenv shell
Creating a virtualenv for this project
Pipfile: /Users/terrence/Development/Python/Projects/test1/Pipfile
Using /usr/local/Cellar/pipenv/2018.11.26_3/libexec/bin/python3.8 (3.8.1) to create virtualenv
 Creating virtual environment...
<SNIP>
Installing setuptools, pip, wheel...
done.
 Successfully created virtual environment! 
<SNIP>

Ora rivedi e confronta l'output dei rispettivi comandi in cui ho installato solo cool-lib e sampleproject (di cui peppercorn è una dipendenza):

test1 % pip freeze       <== Packages I'VE installed w/ pip

-e git+https://github.com/gdamjan/hello-world-python-package.git@10<snip>71#egg=cool_lib
peppercorn==0.6
sampleproject==1.3.1


test1 % pip list         <== All packages, incl. ones I've NOT installed w/ pip

Package       Version Location                                                                    
------------- ------- --------------------------------------------------------------------------
cool-lib      0.1  /Users/terrence/.local/share/virtualenvs/test1-y2Zgz1D2/src/cool-lib           <== Installed w/ `pip` command
peppercorn    0.6       <== Dependency of "sampleproject"
pip           20.0.2  
sampleproject 1.3.1     <== Installed w/ `pip` command
setuptools    45.1.0  
wheel         0.34.2

lista pip - mostra i pacchetti installati, non TUTTI. Controlla la documentazione ufficiale e la risposta di Daniel Lahyani.
filler36

1
@ filler36: pensavo che "installato" fosse implicito, ma ciononostante ho incorporato il tuo feedback per garantire che l'ambiguità non creasse una potenziale confusione. Grazie per il tuo feedback, molto grato! - T
F1Linux
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.