Замораживание пунктов по сравнению со списком пунктов

113

Сравнение результатов показывает различия:

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

В документации Pip говорится

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

но что такое «формат требований» и почему pip listсоздается более полный список, чем pip freeze?

нитрл
источник
5
К вашему сведению, вот документы .
alecxe

Ответы:

110

Когда вы используете 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 знает об этом. Вы не можете [отменить] установку с помощью pip, а более поздние версии Python опускают файл метаданных, поэтому он не отображается.
Zooba
1
@leonid, если вы избавитесь от номера версии в конце, он установит последнюю версию из pypi. Прочтите ответ полностью
karthikr
42

Чтобы ответить на вторую часть этого вопроса, два пакета показаны, pip listно не pip freezeявляются setuptools(это easy_install) и pipсам.

Похоже, что pip freezeпросто не перечислены пакеты, от которых зависит сам pip. Вы можете использовать этот --allфлаг, чтобы показать эти пакеты.

Из документации :

--all

Не пропускайте следующие пакеты в выводе: pip, setuptools, distribute, wheel

ForeverWintr
источник
3
pip freezeесть возможность --allтакже показать: pip, setuptools, distribute, wheel pip.pypa.io/en/stable/reference/pip_freeze
Chananel P
меньше распространять
Макс Кляйнер
38

Основное отличие состоит в том, что вывод pip freezeможно выгрузить в файл requirements.txt и использовать позже для воссоздания «замороженной» среды.

Другими словами, вы можете запустить: pip freeze > frozen-requirements.txtна одной машине, а затем позже на другой машине или в чистой среде, которую вы можете сделать: pip install -r frozen-requirements.txt и вы получите идентичную среду с точно такими же установленными зависимостями, как и в исходной среде, в которой вы создал файл frozen-requirements.txt.

Даниэль Лахьяни
источник
26

Посмотрите документацию по pip , в которой функциональность обоих описывается следующим образом:

список пунктов

Список установленных пакетов, включая редактируемые.

замораживание пипса

Вывести установленные пакеты в формате требований.

Итак, есть два отличия:

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

  2. Вывод содержимого, pip listвключая редактируемые объекты, которых pip freezeнет.

Серджик
источник
6

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
F1Linux
источник
pip list - показывает установленные пакеты, а не ВСЕ. Проверьте официальную документацию и ответ Даниэля Лахьяни.
filler36
1
@ filler36: Я думал, что "установлен" подразумевается, но тем не менее учел ваши отзывы, чтобы двусмысленность не создавала потенциальной путаницы. Спасибо за ваш отзыв, очень признателен! - T
F1Linux