Заметка о Pipenv

10 ноября 2021 г. 1:28

Pipenv - довольно простой инструмент, позволяющий эффективно управлять пакетами. Он настолько прост, что я сомневался, стоит ли он отдельной статьи, однако чем больше я в него погружался, тем больше возможностей открывал, и некоторые из них оказались не столь очевидными, какими казались с самого начала

Что такое pipenv?

Даже если вы никогда не использовали Pipenv, вероятнее всего, он был у вас на слуху, и, вероятно, этому "слуху" вы не уделили должного внимания. Если кратко, то Pipenv - это пакетный менеджер, с помощью которого можно ловко управлять пакетами вашего проекта. Под капотом он использует всем нам знакомый virtualenv. Но зачем он нужен?

Зачем нужен pipenv?

Ведь pip и так позволяет устанавливать и удалять пакеты...

Однако возможности pipenv гораздо шире, чем у него. Pipenv можно сравнить с такими пакетными менеджерами, как npm, pnpm или yarn из мира nodejs. Python разработчики, познавшие их в "бою", полагаю, больше не могли удовлетворяться ограничениями экосистемы пайтона, и создали pipenv.

Какие же возможности открывает разработчику pipenv, которых нет в pip?

  • aвтоматическое создание и активация виртуального окружения
  • разделение зависимостей на development и production
  • построение графа зависимостей между пакетами
  • удобное переключение между версиями python

К слову, в мире node.js пакетный менеджер npm обладал всеми этими возможностями уже из коробки c самого начала. А pipenv увидел свет как отдельный пакет относительно недавно (в 2017 году). Хорошо это или плохо, судить вам, а мы перейдем к практике:

Основные команды:

  • pipenv --python [3.?] - создать виртуальное окружение для конкретной версии python (работает и на Windows тоже, но все версии, которые вы указываете, должны быть уже предустановлена в систему)
  • pipenv shell [--python 3.6] - создать либо войти в виртуальное окружение pipenv
  • pipenv --where - показать месторасположение файла Pipenv
  • pipenv --venv - узнать местоположение виртуального окружения на хост-машине
  • pipenv install [--skip-lock] - установить все пакеты из Pipfile
  • pipenv install some_pack -d - установка нового пакета в список пакетов для разработки
  • pipenv install -r dev-requirements.txt --dev - установить dev dependencies
  • pipenv lock -r [-d] [--keep-outdated] > requirements.txt - генерация requirements.txt. Работает не всегда хорошо, альтернативные варианты:
    • обычный pip freeze > requirements.txt
    • pipenv lock --requirements > requirements.txt
    • pipenv run pip freeze > requirements.txt
  • pipenv lock [--requirements] - должна создать Pipfile.lock (может работать не стабильно)
  • pipenv install --ignore-pipfile - установка зависимостей непосредственно из Pipfile.lock
  • pipenv graph - показать дерево зависимостей

Особенности:

В случае если внутри виртуального окружения начинает работать глобальный pip, советую обновить глобальный virtualenv и перезапустить виртуальное окружение. Так же в случае некорректной работы, вероятно, стоит попробовать сменить терминал (например, conemu на cmd или наоборот).

К слову сказать, у pipenv есть еще один недостаток - он не очень быстрый. И в мире python есть еще один инструмент со подобным функционалом (poetry), в котором разработчики сделали упор на перфоманс. Однако, этот инструмент плохо поддерживается в экосистеме Windows (если вы используете ее в разработке, не стоит делать на него ставки)

Полезные ссылки по теме:

  • Pipenv на pip
  • Репозиторий poetry
admin
(ваш голос учтен)
Александр 6 января 2023 г. 19:13
poetry тоже было бы интересно рассмотреть
Ответить