Pip freeze что это
Перейти к содержимому

Pip freeze что это

  • автор:

pip list и pip freeze в чем разница?

Бывает, что pip freeze показывать меньше пакетов чем pip list.

KRex ★
09.10.19 22:42:52 MSK

Output installed packages in requirements format. Packages are listed in a case-insensitive sorted order.

List installed packages, including editables. Packages are listed in a case-insensitive sorted order.

Anoxemian ★★★★★
( 09.10.19 22:46:31 MSK )
Ответ на: комментарий от Anoxemian 09.10.19 22:46:31 MSK

Я это читал.

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

Что значит редактируемые?

KRex ★
( 09.10.19 23:16:51 MSK ) автор топика
Ответ на: Я это читал. от KRex 09.10.19 23:16:51 MSK

Упрощенно: обычно при установке содержимое питоновского пакета копируется, для редактируемых (development mode) навешиваются ссылки, поэтому после редактирования пакета его не надо переустанавливать.

lu4nik ★★★
( 09.10.19 23:26:14 MSK )
Ответ на: комментарий от lu4nik 09.10.19 23:26:14 MSK

Протестировал

Создал файл setup.py со следующим содержимым

from setuptools import setup setup(name='tested', py_modules=['tested']) 
sudo python3 setup.py develop 

И пакет tested стал редактируемым, но он доступ через pip list и через pip freeze, а должен быть виден только из pip list исходя из описания команды.

Все требования в одном месте – requirements.txt

Обычно для запуска проекта требуется несколько внешних пакетов.

Чтобы каждый раз с болью в сердце не собирать их, список этих пакетов принято поставлять вместе с исходным кодом. Принято селить весь список необходимых пакетов в файле requirements.txt в корне проекта. Формат этого файла простой: по одному пакету на строку.

Заморозка пакетов

У одного пакета обычно много версий. Когда мы просим пип установить пакет, он устанавливает самую свежую из доступных.

Это может привести к проблемам: скажем, проект разрабатывался на версии 1.2. Через полгода потребовалось развернуть его заново, пип установил последнюю версию – 1.5. Эта версия может быть не совместима со старой, тогда код сломается.

Например, такая история была с модулем vk : в версии 1.5 нужно было использовать класс vk.api.APISession , а в версии 2.0 – vk.OAuthAPI . Понятное дело, программа, которая использует не ту версию модуля, ломалась – старого класса-то нет.

Чтобы такого не происходило, пакеты принято замораживать – указывать версию пакета вместе с названием. Пип поддерживает такой синтаксис: модуль==версия .

Вот часть requirements.txt из Девмана:

django==1.10.2 pillow==3.3.0 gunicorn==19.6.0 sorl-thumbnail==12.3 ptpython==0.35 

Получить все версии пакетов, установленных на вашем компьютере, можно командой pip freeze :

$ pip freeze django==1.10.2 pillow==3.3.0 gunicorn==19.6.0 sorl-thumbnail==12.3 ptpython==0.35 . 

Все зависимости заморозить и в requirements.txt

Установка

Все пакеты из requirements.txt можно установить одним махом, пип такое умеет: pip install -r requirements.txt .

Зависимости зависимостей

К сожалению, правильное заполнение requirements.txt не решает все проблемы с зависимостями и версиями.

Дело в том, что у перечисленных в файле зависимостей есть свои зависимости. Например, модуль vk для своей установки требует модуль requests . Пип установит его сам, незаметно для нас.

Проблема в том, что если модуль requests не заморожен в исходниках модуля vk , через полгода всё опять может сломаться: версия vk будет правильная, а requests – нет.

Эта проблема свойственна большим проектам, у которых десятки зависимостей и сотни неявных зависимостей.

Решение этой проблемы рассмотрим в другой раз. Главное – быть начеку.

Попробуйте бесплатные уроки по Python

Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.

Переходите на страницу учебных модулей «Девмана» и выбирайте тему.

pip freeze requirements txt

pip freeze requirements.txt — команда, которая позволяет создать текстовый документ, в котором перечислены все установленные и необходимые для работы Python приложения программные пакеты.

Самый распространенный веб-фреймворк на Python — Django, requirements.txt всегда используется при запуске Django на сервере.

Список всех пакетов можно посмотреть выполнив pip freeze — стандартный вывод производится на экран. Обычно эту информацию сохраняют в файл.

Файл оставляется в корне приложения, он оказывается нужен если проект переносится на другой сервер.

Глобальная и локальная установка пакетов через pip

Если команду выполнить авторизовавшись на сервере по ssh она выдаст список модулей установленных с помощью pip в систему глобально.

Приложения обычно запускаются в своём виртуальном окружении и со своим набором модулей. Если используется виртуальное окружение, то прежде всего нужно его активировать.

Когда имя виртуального окружения неизвестно — его можно попробовать найти выполнив в каталоге приложения find . -name activate. activate это бинарный файл активирующий окружение. Имя самого окружения будет на два уровня выше в иерархии каталогов чем файл activate.

Пример приведен на скриншоте:

pip freeze requirements txt

Здесь окружение называется DjangoProject, оно найдено с помощью find. Затем активировано через source. После активации работа с модулями python выполняется не глобально, а в виртуальном окружении.

На скриншоте ниже представлен пример установки модуля Django в вирутальное окружение DjangoProject.

pip freeze requirements.txt

Через pip freeze выведен список установленных модулей (три из них поставились по зависимостям). Потом вывод сохранен в файл с именем requirements.txt.

Установка модулей из файла в чистое окружение выполняется командой pip install -r requirements.txt

Далее рассмотрим самую распространенную ситуацию при которой может потребоваться pip freeze и requirements.txt — перенос сайта на Django на другой сервер.

Перенос сайта на Django на другой сервер с pip freeze и requirements.txt

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

Если используется виртуальное окружение — команду нужно выполнять в нем.

Виртуальное окружение для любого проекта можно активировать выполнив source /project-folder/bin/activate

Затем копируются файлы приложения и requirements.txt. При необходимости на новом сервере создается виртуальное окружение. На новом сервере должна быть такая же версия Python и желательно такой же дистрибутив Linux.

Создаются такие же каталоги, виртуальное окружение, настраивается веб-сервер. Примеры настройки веб-сервера можно посомтреть в материалах по ссылкам в конце статьи.

Установка всех пакетов по списку в новое окружение на новом сервере производится при выполнении

Внесение изменений в requirements.txt вручную является не самой лучшей практикой.

Автоматическая установка пакетов из этого файла в большинстве случаев окажется невозможна.

Что может потрбоваться дополнительно именно для Django

Часто после переноса проект запускается, статическое содержимое (изображения, стили) при этом не отдается

Чтобы решить этот вопрос нужно выполнить команду

Она позволяет собрать статику в STATIC_ROOT.

При этом если существуют файлы с одинаковым именем обработан будет только один из них (какой файл использует сайт можно выяснить при помощи findstatic — используется:

django-admin.py findstatic /path/to/the/folder

В выводе будут все файлы изображений, CSS стилей и т.п.; также команду можно запускать с ключом —first .

В этом случае в вывод попадет только первое вхождение, далее поиск прекратится.

В dev режиме проект запускается с указанием файла django-admin.py и имени проекта

python django-admin.py startproject projectname

Для запуска в рабочем режиме обычно используется gunicorn или uwcgi в качестве сервера приложений и Nginx в качестве веб-сервера.

Читайте про запуск проекта на Python с помощью gunicorn и про деплой Flask с uwsgi

Requirements.txt — как получить?

Это если проект работает. Если нет — запускать, смотреть, на какие библиотеки ругается, и гуглить эти библиотеки.

31 янв 2015 в 20:38
спасибо, создание удалось
31 янв 2015 в 21:08

Чтобы получить запрошенный файл потребуется перенаправить вывод этой команды в файл: pip freeze > requirements.txt

10 апр 2015 в 18:36

Не забывайте только, что это список всех пакетов, имеющихся в текущем интерпретаторе, а не только использующихся в проекте

31 июл 2019 в 20:44

Чтобы получить список пакетов в проекте выполняем команду

pip freeze 

Для записи вывода в requirements.txt дополняем следующим образом:

pip freeze > requirements.txt 

Команду выполняем в корне проекта. Там же появится и файл. Подразумевается использование активного venv для текущего проекта. При выполнении вне виртуальной среды текущего проекта могут быть подтянуты лишние пакеты, не связанные с текущим проектом!

Отслеживать
ответ дан 29 ноя 2016 в 9:48
Igor Osadchyi Igor Osadchyi
369 3 3 серебряных знака 3 3 бронзовых знака
Добавьте комментарии к своему ответу. Что происходит в этом куске кода, чем это может помочь и т.п.
29 ноя 2016 в 10:10
Это список всех пакетов, имеющихся в текущем интерпретаторе, а не только использующихся в проекте
31 июл 2019 в 20:42
Подразумевается использование venv, который для каждого проекта свой.
4 авг 2019 в 18:19

При выполнении вне виртуальной среды текущего проекта могут быть подтянуты лишние пакеты — это не совсем так. Будут подтянуты пакеты из текущей виртуальной среды. Так в общем случае эта среда никак не связана с проектом, то там может быть все что угодно, т.е. не просто лишние, а вообще другие — установленные в тут другую виртуальную среду.

16 мар 2021 в 18:26

Лучше всего смотреть в INSTALLED_APPS и выковыривать всё вручную. С pip freeze есть вариант получить тыкву через некоторое время, ибо он вытягивает абсолютно все пакеты вместе с их зависимостями (включая системные), а пакеты со временем обновляются, старые версии удаляются. Да и нечего вам рулить зависимостями вручную — это задача менеджера пакетов (pip или easy_install).

Лучше всего заполнять файл requirements по мере написания проекта, а не после.

Добавлено: Есть подходящая опция у pip: pip freeze —local .

Из справки: If in a virtualenv that has global access, do not output globally-installed packages.

Отслеживать
ответ дан 7 апр 2015 в 8:43
3,071 12 12 серебряных знаков 20 20 бронзовых знаков

Чтобы создать requirements.txt или обновить уже существующий файл, чтобы он соответствовал текущему virtualenv, можно использовать pip-dump команду:

$ pip install pip-tools $ pip-dump 

Отслеживать
ответ дан 8 апр 2015 в 22:03
52.2k 11 11 золотых знаков 108 108 серебряных знаков 311 311 бронзовых знаков

Для работы с requirements.txt есть Python библиотека pipreqs

Установка: pip install pipreqs

  • Чтобы сгенерировать файл requirements.txt используйте pipreqs /path/to/project/folder
  • Если requirements.txt уже есть и необходимо его перезаписать, то используйте флаг —force
  • Если нужно просто посмотреть на используемые библиотеки без создания, флаг —print

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *