Управление зависимостями приложения Python обычно осуществляется с помощью виртуальной среды (VirtualEnv) + requirements.txt. Однако с увеличением сложности системы и добавлением большего количества зависимостей, а также с возможным обновлением версий этих зависимостей это может скорее помешать, чем помочь. В этом сценарии комбо venv + requirements.txt является недостаточным, поэтому стоит поискать другие альтернативы.
Если вы работали с проектами Javascript с использованием экосистемы Node JS, вы, вероятно, использовали NPM (Node Package Manager) или Yarn для управления зависимостями, или Maven в проектах Java, и, возможно, вы не заметили подобную структуру в Python. В этом случае вам необходимо познакомиться с Pipenv.
Pipenv – это инструмент, который призван привнести лучшее из всех миров упаковки (bundler, composer, npm, cargo, yarn и т.д.) в экосистему Python, объединив установщик пакетов pip и virtualenv и заменив файл requirements.txt. Выпущенный в 2017 году Кеннетом Рейцем (создателем библиотеки requests), Pipenv не потребовалось много времени, чтобы быть принятым сообществом.
Он автоматически создает и управляет виртуальной средой (virtualenv) для ваших проектов и добавляет или удаляет пакеты из вашего Pipfile, когда в их устанавливаете или удаляете. Он также генерирует важный Pipfile.lock, ваш любимый файл конфигурации системных зависимостей.
Содержание
Преимущества Pipenv
- Нет необходимости использовать pip и virtualenv отдельно. Они работают вместе.
- Автоматически генерирует Pipfile, если он не существует.
- Автоматически создает virtualenv в каталоге по умолчанию.
- Автоматически добавляет или удаляет пакеты в Pipfile при их деинсталляции или установке.
- Автоматически обнаруживает уязвимости в системе безопасности.
- Позволяет просмотреть граф зависимостей (с помощью pipenv graph).
- Ускоряет рабочий процесс, загружая файлы .env.
Установка Pipenv
Процесс установки Pipenv довольно прост. Убедитесь, что на вашем компьютере уже установлены Python и pip, выполнив команды*:
python --version pip --version
*в зависимости от версии вашего дистрибутива команда python может относиться к Python 2.x, если это ваш случай, попробуйте использовать python3 –version, а также pip3 –version.
Запускаем установку командой.
pip install pipenv
Применение на практике
После установки Pipenv пришло время создать виртуальную среду и установить некоторые зависимости. Для этого создайте любой проект для примера (в данном случае я назову его ‘pipenv-test’):
mkdir pipenv-test cd pipenv-test
Создайте файл Pipfile и виртуальную среду для проекта с помощью команды:
pipenv --three
Флаг –three относится к Python 3. Если вы хотите использовать его с Python 2, используйте –two.
Активируйте virtualenv проекта с помощью:
pipenv shell
Установите любую библиотеку (в данном случае мы установим requests)
pipenv install requests
Pipenv обновит наш Pipfile с установленной библиотекой Requests и позаботится о создании Pipfile.lock
Базовые команды
- graph: возвращает график зависимостей вашего проекта.
- run: запускает команду из virtualenv с передачей любых аргументов (pipenv run pip freeze).
- check: проверяет, соответствует ли проект требованиям, установленным в Pipfile, или соответствие требований WBS 508 текущей среде.
- update: обновляет зависимости проекта.
- –help: возвращает список возможных команд.
Разница между Pipfile и Pipfile.lock
Pipfile предназначен для указания требований к пакету для приложения, как для разработки, так и для выполнения.
Pipfile.lock предназначен для указания, на основе пакетов, присутствующих в Pipfile, какую конкретную версию зависимостей следует использовать, избегая риска автоматического обновления пакетов, которые зависят друг от друга, и разрушения дерева зависимостей проекта.
Заключение
Pipenv – это инструмент для управления зависимостями, устраняющий необходимость в использовании файла requirements.txt и комбо pip + virtualenv. Производительность и организованность Pipenv делают его очень хорошей альтернативой для любого проекта.