pip install -r requirements.txtНо с ростом числа поддерживаемых проектов появляются конфликты между разными версиями пакетов. Например, одновременная поддержка Django версий 2, 3 и 4 — это кромешный ад. В статье Modern Python Environments приведен обзор систем управления окружением в python, а в конце есть удобная сравнительная табличка.
Какие проблемы есть у requirements?
1. Команда
pip freeze выводит длинную портянку зависимостей проекта. Поддерживать в аккуратном, контролируемом состоянии подобный файл сложно. Никогда нельзя понять, какие из зависимостей являются основными, а какие транзитивными.2. Нет возможности разделять зависимости по средам исполнения. В development-среде нужны тесты и линтеры, которые в production-среде не требуются.
Для управления зависимостями в проектах я использую Poetry. Из интересного, в poetry отказались от привычного нам requirements, решив проблемы так:
1. Основные зависимости проекта хранятся в файле pyproject.toml, все остальные зависимости poetry собирает в отдельном файле.
2. Для разделения зависимостей по средам исполнения в процессе установки пакета необходимо указать соответствующую опцию и в pyproject.toml появится соответствующий раздел. В production-среде вы сможете устанавливать одни зависимости, в dev другие.
Еще в poetry стоит выделить возможность собирать ваш код в питоновские пакеты, дополнительно не описывая установщик setup. Есть и другие интересности, за которыми стоит заглянуть в документацию.
Poetry полезен даже в Docker, обеспечивая возможность переноса зависимостей между этапами сборки в multi-stage builds.
#python