Pip freeze vs. lista de pip

110

Una comparación de productos revela diferencias:

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

Estados de la documentación de Pip

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

pero ¿qué es el "formato de requisitos" y por qué pip listgenera una lista más completa que pip freeze?

nitrl
fuente
5
FYI, aquí están los documentos .
alecxe

Respuestas:

108

Cuando usa un virtualenv, puede especificar un requirements.txtarchivo para instalar todas las dependencias.

Un uso típico:

$ pip install -r requirements.txt

Los paquetes deben estar en un formato específico para pipcomprender, que es

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

Ese es el "formato de requisitos".

Aquí, django==1.4.2implica la djangoversión de instalación 1.4.2(aunque la última es 1.6.x). Si no lo especifica ==1.4.2, se instalará la última versión disponible.

Puede leer más en " Conceptos básicos de Virtualenv y pip " y la documentación oficial " Formato de archivo de requisitos ".

karthikr
fuente
5
Entendido. ¿Existe alguna razón en particular por la que "lista" produce una lista más completa que "congelar"?
nitrl
2
Creo que es porque pip listenumera todo e pip freezeinstala todo lo instalado por pip.
karthikr
Hm, eso es una teoría, pero estoy bastante seguro de que no lo hice pip install wsgiref.
nitrl
Python 3.2 se incluye wsgiref.egg-infoen el directorio Lib, por lo que pip lo sabe. No puede [desinstalar] instalarlo con pip, y las versiones posteriores de Python omiten el archivo de metadatos para que no aparezca.
Zooba
1
@leonid si se deshace del número de versión al final, instalará la última versión de pypi. Lea la respuesta completa
karthikr
42

Para responder a la segunda parte de esta pregunta, los dos paquetes que se muestran pip listpero no pip freezeson setuptools(que es easy_install) ypip sí mismo.

Parece que pip freezesimplemente no enumera los paquetes de los que depende el pip. Puede utilizar el--all bandera para mostrar también esos paquetes.

De la documentación :

--all

No omita estos paquetes en la salida: pip, setuptools, distribuir, rueda

ForeverWintr
fuente
3
pip freezetiene una opción --allpara mostrar también: pip, setuptools, distribute, wheel pip.pypa.io/en/stable/reference/pip_freeze
Chananel P
distribuir menos
Max Kleiner
37

La principal diferencia es que la salida de pip freeze se puede volcar en un archivo requirements.txt y usarse más tarde para reconstruir el entorno "congelado".

En otras palabras, puede ejecutar: pip freeze > frozen-requirements.txten una máquina y luego en una máquina diferente o en un entorno limpio, puede hacerlo: pip install -r frozen-requirements.txt y obtendrá un entorno idéntico con exactamente las mismas dependencias instaladas que tenía en el entorno original donde generó el archivo frozen-requirements.txt.

Daniel Lahyani
fuente
26

Mire la documentación de pip , que describe la funcionalidad de ambos como:

lista de pips

Enumere los paquetes instalados, incluidos los editables.

congelación de pepitas

Salida de paquetes instalados en formato de requisitos.

Entonces hay dos diferencias:

  1. Formato de salida, freezenos proporciona el formato de requisitos estándar que se puede utilizar más adelante pip install -rpara instalar los requisitos.

  2. Contenido de salida, pip listincluye editables que pip freezeno lo hacen.

Serjik
fuente
¿Qué entendemos por editables?
Sr. Suryaa Jha
5

pip listmuestra TODOS los paquetes.

pip freezemuestra los paquetes que USTED instaló a través de pip(opipenv comando si usa esa herramienta) en un formato de requisitos.

Observe a continuación que setuptools , pip , wheel se instalan cuando pipenv shellcrea mi sobre virtual. Estos paquetes NO fueron instalados por mí usando 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>

Ahora revise y compare la salida de los comandos respectivos donde solo instalé cool-lib y sampleproject (de los cuales peppercorn es una dependencia):

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
fuente