Liste des pip freeze vs pip

111

Une comparaison des extrants révèle des différences:

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

États de la documentation de Pip

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

mais qu'est-ce que le «format des exigences» et pourquoi pip listgénère-t-il une liste plus complète que pip freeze?

nitrl
la source
5
Pour info, voici les documents .
alecxe le

Réponses:

110

Lorsque vous utilisez a virtualenv, vous pouvez spécifier unrequirements.txt fichier pour installer toutes les dépendances.

Une utilisation typique:

$ pip install -r requirements.txt

Les packages doivent être dans un format spécifique pour pipcomprendre, qui est

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

C'est le "format des exigences".

Ici, django==1.4.2implique la djangoversion d' installation 1.4.2(même si la dernière est la 1.6.x). Si vous ne le spécifiez pas ==1.4.2, la dernière version disponible sera installée.

Vous pouvez en savoir plus dans " Virtualenv and pip Basics " et dans la documentation officielle " Requirements File Format ".

karthikr
la source
5
Je l'ai. Y a-t-il une raison particulière pour laquelle «liste» produit une liste plus complète que «gel»?
nitrl
2
Je pense que c'est parce que pip listrépertorie tout et pip freezeinstalle tout ce qui est installé par pip.
karthikr
Hm, c'est une théorie, mais je suis assez sûr que non pip install wsgiref.
nitrl
Python 3.2 inclut wsgiref.egg-infodans le répertoire Lib, c'est pourquoi pip le sait. Vous ne pouvez pas le [dés] installer avec pip, et les versions ultérieures de Python omettent le fichier de métadonnées pour qu'il n'apparaisse pas.
Zooba
1
@leonid si vous supprimez le numéro de version à la fin, il installera la dernière version de pypi. Lire la réponse complètement
karthikr
42

Pour répondre à la deuxième partie de cette question, les deux packages affichés dans pip listmais non pip freezesont setuptools(qui est easy_install) et piplui - même.

Il semble pip freezeque ne répertorie tout simplement pas les paquets dont pip dépend lui-même. Vous pouvez utiliser le--all indicateur pour afficher également ces packages.

De la documentation :

--all

Ne sautez pas ces packages dans la sortie: pip, setuptools, distribuer, wheel

ForeverWintr
la source
3
pip freezea une option --allpour afficher aussi: pip, setuptools, distribute, wheel pip.pypa.io/en/stable/reference/pip_freeze
Chananel P
moins distribuer
Max Kleiner
37

La principale différence est que la sortie de pip freeze peut être sauvegardée dans un fichier requirements.txt et utilisée plus tard pour reconstruire l'environnement «gelé».

En d'autres termes, vous pouvez exécuter: pip freeze > frozen-requirements.txtsur une machine, puis plus tard sur une machine différente ou sur un environnement propre, vous pouvez le faire: pip install -r frozen-requirements.txt et vous obtiendrez un environnement identique avec exactement les mêmes dépendances installées que dans l'environnement d'origine où vous a généré le fichier Frozen-requirements.txt.

Daniel Lahyani
la source
26

Regardez la documentation pip , qui décrit les fonctionnalités des deux comme:

liste pip

Répertoriez les packages installés, y compris les éléments modifiables.

gel de pip

Sortie des packages installés au format des exigences.

Il y a donc deux différences:

  1. Format de sortie, freezenous donne le format d'exigence standard qui peut être utilisé plus tard avec pip install -rpour installer les exigences à partir de.

  2. Contenu de sortie, pip listinclure les éditables qui pip freezene le font pas.

Serjik
la source
6

pip listaffiche TOUS les packages installés.

pip freezeaffiche les packages que VOUS avez installés via pip(oupipenv si vous utilisez cet outil) dans un format requis.

Remarque ci-dessous que setuptools , pip , wheel sont installés lors de la pipenv shellcréation de mon enveloppe virtuelle. Ces packages n'ont PAS été installés par moi en utilisant 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>

Maintenant, examinez et comparez la sortie des commandes respectives où je n'ai installé que cool-lib et sampleproject (dont le poivre est une dépendance):

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
la source
liste pip - affiche les packages installés, pas TOUS. Consultez la documentation officielle et la réponse de Daniel Lahyani.
filler36 Il y a
1
@ filler36: Je pensais que "installé" était implicite, mais j'ai néanmoins intégré vos commentaires pour m'assurer que l'ambiguïté ne créait pas de confusion potentielle. Merci pour vos commentaires, très obligé! - T
F1Linux il y a