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


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


pip freeze > requirements.txt

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



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



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



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



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

pip install -r requirements.txt


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

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



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


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


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


python manage.py collectstatic


Она позволяет собрать статику в 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

Сказать спасибо