Pip заморожування проти списку


111

Порівняння результатів виявляє відмінності:

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

У документації Піпа зазначено

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

але що таке "формат вимог" і чому pip listгенерується більш повний список, ніж pip freeze?


5
FYI, ось документи .
alecxe

Відповіді:


109

Коли ви використовуєте a virtualenv, ви можете вказати requirements.txtфайл для встановлення всіх залежностей.

Типове використання:

$ pip install -r requirements.txt

Пакети повинні бути у визначеному форматі, pipщоб зрозуміти, що це таке

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

Це "формат вимог".

Тут django==1.4.2мається на увазі djangoверсія встановлення 1.4.2(навіть незважаючи на те, що остання версія 1.6.x). Якщо ви не вкажете ==1.4.2, буде встановлена ​​остання доступна версія.

Докладніше можна прочитати у розділі " Основи Virtualenv та pip " та в офіційній документації " Формат файлу з вимогами ".


5
Зрозумів. Чи є якась конкретна причина, чому "список" створює більш вичерпний список, ніж "заморожувати"?
nitrl

2
Я думаю, що це тому, що pip listперераховує все, і pip freezeвстановлює все, що встановлено через pip.
karthikr

Гм, це теорія, але я впевнений, що цього не зробив pip install wsgiref.
nitrl

Python 3.2 включає wsgiref.egg-infoв каталог Lib, саме тому pip знає про це. Ви не можете [un] встановити його за допомогою pip, а пізніші версії Python опускають файл метаданих, щоб він не відображався.
Zooba

1
@leonid якщо ви позбудетеся номера версії в кінці, вона встановить останню версію від pypi. Прочитайте повністю відповідь
karthikr

42

Щоб відповісти на другу частину цього питання, два пакунки, показані в, pip listале не, pip freezeє setuptools(що є легким_встановленням) і pipсамим собою.

Схоже, pip freezeпросто не перераховані пакети, від яких залежить сам pip. Ви можете використовувати --allпрапор для показу також цих пакетів.

З документації :

--all

Не пропускайте ці пакети у висновку: pip, setuptools, distribute, wheel


3
pip freezeє можливість --allтакож показати: pip, setuptools, distribute, wheel pip.pypa.io/en/stable/reference/pip_freeze
Chananel P

менше розповсюджуйте
Макс Клейнер

37

Основна відмінність полягає в тому, що вихідний pip freezeфайл може бути скинутий у файл вимоги.txt і використаний пізніше для відновлення "замороженого" середовища.

Іншими словами, ви можете працювати: pip freeze > frozen-requirements.txtна одній машині, а потім пізніше на іншій машині або в чистому середовищі, яку ви можете зробити: pip install -r frozen-requirements.txt і ви отримаєте ідентичне середовище з точно такими ж залежностями, які встановлені, як у первісному середовищі, де ви згенеровано заморожені вимоги.txt.


26

Подивіться на документацію pip , яка описує функціональність обох як:

список піп

Перелічіть встановлені пакети, включаючи редаговані.

pip заморожувати

Вивести встановлені пакети у форматі вимог.

Отже, є дві відмінності:

  1. Формат виводу freezeдає нам стандартний формат вимог, який може бути використаний пізніше pip install -rдля встановлення вимог з.

  2. Вихідний вміст, pip listвключаючи редаговані елементи, яких pip freezeнемає.


що ми маємо на увазі під редакцією?
Містер Сур’я Джа


5

pip listпоказує ВСІ пакети.

pip freezeпоказує пакети, ВАС встановлені за допомогою команди pip(або pipenvякщо використовується цей інструмент) у форматі вимог.

Зауважте нижче, що setuptools , pip , wheel встановлюються під час pipenv shellстворення мого віртуального конверта. Ці пакети НЕ були встановлені мною за допомогою 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>

Тепер перегляньте та порівняйте вихід відповідних команд, де я встановив лише cool-lib та sampleproject (від яких перець - залежність):

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.