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?


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 ".


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


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.


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.


¿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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.