Как получить только используемые зависимости requirements.txt
Натыкался как то на пакет, которые оставляет только необходимые пакеты. Чтобы не было мусорных неиспользуемых пакетов. Никто не напомнит? Это точно не pipreqs так как этот решил просто выкинуть psycopg
Из подсказок, тот пакет, что я ищу, еще выводил в комментариях для чего используется зависимость
Ответы (1 шт):
Могу предложить два варианта:
Вариант 1: pigar. Генерирует requirements.txt как для текущей директории проекта, так и для выбранной папки. Поиск происходит на основании импортов.
Создать для рабочей директории requirements.txt
pigar
Создать для указанной директории список зависимостей с указанным именем файла вывода
pigar -p ../dev-requirements.txt -P ../
Проверка наличия обновлений библиотек:
pigar -c
Пример вывода:
# stackoverflow/manage.py: 11
# stackoverflow/test/asgi.py: 12
# stackoverflow/test/urls.py: 16,17
# stackoverflow/test/wsgi.py: 12
Django == 3.2.5
Вариант 2: pip-tools требует либо наличия setup.py, либо requirements.in для получения списка основных библиотек, для которых уже строится расширенный requirements.txt.
Сборка зависимостей через setup.py
pip-compile
Сборка зависимостей через requirements.in
pip-compile requirements.in
Пример вывод:
#
# This file is autogenerated by pip-compile
# To update, run:
#
# pip-compile
#
asgiref==3.2.3
# via django
django==3.0.3
# via my_django_project (setup.py)
pytz==2019.3
# via django
sqlparse==0.3.0
# via django
Бонусом библиотека позволяет создавать слои зависимостей в виде requirements.in, dev-requirements.in для формирования зависимостей стадий рабочего проекта, разработки и т.п.
Синхронизация рабочего пространства через pip-sync для продакшена и, к примеру, pip-sync requirements.txt dev-requirements.txt для разработки.
Главный минус. Нужно формировать самому requirements.in и т.п.
Для обоих библиотек есть минус в том, что не подхватывается все, что не вызывается через import.