Pip Freeze vs. Pip-Liste

109

Ein Vergleich der Ergebnisse zeigt Unterschiede:

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

In der Dokumentation von Pip heißt es

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

Aber was ist "Anforderungsformat" und warum pip listwird eine umfassendere Liste erstellt als pip freeze?

nitrl
quelle
5
Zu Ihrer Information, hier sind die Dokumente .
Alecxe

Antworten:

107

Wenn Sie a verwenden virtualenv, können Sie eine requirements.txtDatei angeben , um alle Abhängigkeiten zu installieren.

Eine typische Verwendung:

$ pip install -r requirements.txt

Die Pakete müssen in einem bestimmten Format vorliegen, um dies pipzu verstehen

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

Das ist das "Anforderungsformat".

Hier django==1.4.2impliziert die Installationsversion (obwohl die neueste djangoVersion 1.4.21.6.x ist). Wenn Sie nicht angeben ==1.4.2, wird die neueste verfügbare Version installiert.

Weitere Informationen finden Sie in " Virtualenv and pip Basics " und in der offiziellen Dokumentation " Requirements File Format ".

karthikr
quelle
5
Verstanden. Gibt es einen bestimmten Grund, warum "Liste" eine umfassendere Liste erstellt als "Einfrieren"?
Nitrl
2
Ich denke, das liegt daran, dass pip listalles aufgelistet und pip freezealles installiert wird , was von pip installiert wurde.
Karthikr
Hm, das ist eine Theorie, aber ich bin mir ziemlich sicher, dass ich es nicht getan habe pip install wsgiref.
Nitrl
Python 3.2 wird wsgiref.egg-infoin das Lib-Verzeichnis aufgenommen, weshalb pip davon weiß. Sie können es nicht mit pip [deinstallieren], und spätere Versionen von Python lassen die Metadatendatei weg, sodass sie nicht angezeigt wird.
Zooba
1
@leonid Wenn Sie die Versionsnummer am Ende entfernen, wird die neueste Version von pypi installiert. Lesen Sie die Antwort vollständig
karthikr
42

Um den zweiten Teil dieser Frage zu beantworten, die beiden Pakete gezeigt in , pip listaber nicht pip freezesind setuptools(was easy_install ist) und pipsich selbst.

Es sieht pip freezeso aus, als würden keine Pakete aufgelistet, von denen pip selbst abhängt. Sie können das --allFlag verwenden, um auch diese Pakete anzuzeigen.

Aus der Dokumentation :

--all

Überspringen Sie diese Pakete nicht in der Ausgabe: pip, setuptools, verteilen, Rad

ForeverWintr
quelle
3
pip freezehat eine Option --all, um auch pip, setuptools, distribute, wheel anzuzeigen
Chananel P
weniger verteilen
Max Kleiner
36

Der Hauptunterschied besteht darin, dass die Ausgabe von pip freeze in eine Datei "require.txt" kopiert und später zum Neuerstellen der "eingefrorenen" Umgebung verwendet werden kann.

Mit anderen Worten, Sie können Folgendes ausführen: pip freeze > frozen-requirements.txtauf einem Computer und später auf einem anderen Computer oder in einer sauberen Umgebung: pip install -r frozen-requirements.txt und Sie erhalten eine identische Umgebung mit genau denselben Abhängigkeiten wie in der ursprünglichen Umgebung, in der Sie sich befanden hat die Frozen-Requirements.txt generiert.

Daniel Lahyani
quelle
25

Schauen Sie sich die Pip-Dokumentation an , in der die Funktionalität von beiden wie folgt beschrieben wird:

Pip-Liste

Liste der installierten Pakete, einschließlich der bearbeitbaren Pakete.

Pip einfrieren

Installierte Pakete im Anforderungsformat ausgeben.

Es gibt also zwei Unterschiede:

  1. Das Ausgabeformat freezegibt uns das Standardanforderungsformat an, mit dem später pip install -rAnforderungen installiert werden können.

  2. Ausgabeinhalt, pip listeinschließlich bearbeitbarer Dateien, die pip freezedies nicht tun .

Serjik
quelle
Was verstehen wir unter editierbaren Dateien?
Herr Suryaa Jha
5

pip listzeigt ALLE Pakete.

pip freezezeigt Pakete an, die SIE über pip(oder installiert habenpipenv Befehl bei Verwendung dieses Tools) in einem Anforderungsformat .

Beachten Sie , dass beim Erstellen meines virtuellen Umschlags Setuptools , Pip und Wheel installiert sind pipenv shell. Diese Pakete wurden NICHT von mir installiert mit 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>

Überprüfen und vergleichen Sie nun die Ausgabe der jeweiligen Befehle, bei denen ich nur cool-lib und sampleproject installiert habe (von denen Pfefferkorn eine Abhängigkeit ist):

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
F1Linux
quelle