Одно из больших различий между работой над проектами Ruby и Python заключается в том, как обычно управляются зависимости. В настоящее время нет ничего похожего на Bundler или Gemfiles во вселенной Python, поэтому обычно разработчик Python создает виртуальную среду с использованием Virtualenv, а затем аннотирует текстовый файл require.txt списком зависимых пакетов, которые затем можно установить с помощью Pip.

Этот подход работает нормально, но иногда это может быть проблемой, поскольку вам нужно вручную устанавливать или удалять пакеты с определенными версиями, и не забывать регулярно обновлять файл requirements.txt, чтобы поддерживать согласованность среды проекта. Особенно, когда есть пакеты Python, которые вы хотите установить в вашей виртуальной среде, но не обязательно связанные с самим проектом. Более того, в некоторых проектах иногда поддерживаются две версии файла requirements.txt — одна для среды разработки и другая для рабочей среды, что может привести к дальнейшим осложнениям.

К счастью, последний инструмент Кеннета Рейтца, Pipenv, служит для упрощения управления зависимостями в проектах на основе Python. Он объединяет Pip, Pipfile и Virtualenv для предоставления простого и мощного инструмента командной строки.

Приступим

Начните с использования pip для установки Pipenv и его зависимостей,

pip install pipenv

Затем перейдите в папку, содержащую ваш проект Python, и запустите Pipenv,

cd my_project
pipenv install

Это создаст два новых файла, Pipfile и Pipfile.lock, в каталоге вашего проекта и новую виртуальную среду для вашего проекта, если она еще не существует. Если вы добавите флаги —two или —three к последней команде, приведенной выше, он инициализирует ваш проект для использования Python 2 или 3 соответственно. В противном случае будет использоваться версия Python по умолчанию.

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

Чтобы установить пакет Python для вашего проекта, используйте ключевое слово install. Например,

pipenv install beautifulsoup4

установит текущую версию пакета Beautiful Soup. Пакет можно удалить аналогичным образом с помощью ключевого слова uninstall,

pipenv uninstall beautifulsoup4

Имя пакета вместе с его версией и списком собственных зависимостей можно заморозить, обновив файл Pipfile.lock. Это делается с помощью ключевого слова блокировки,

pipenv lock

Стоит добавить Pip-файлы в ваш Git-репозиторий, так что если другому пользователю нужно будет клонировать репозиторий, все, что ему нужно будет сделать, это установить Pipenv в своей системе и затем набрать,

pipenv install

Затем Pipenv автоматически найдет Pip-файлы, создаст новую виртуальную среду и установит необходимые пакеты.

Обычно есть некоторые пакеты Python, которые требуются только в вашей среде разработки, а не в вашей производственной среде, например, пакеты модульного тестирования. Pipenv позволит вам разделить две среды, используя флаг —dev. Например,

pipenv install --dev nose2

установит nose2, но также свяжет его как пакет, который требуется только в вашей среде разработки. Это полезно, потому что теперь, если вам нужно установить проект в производственной среде с помощью

pipenv install

пакет по умолчанию не будет установлен по умолчанию. Однако, если другой разработчик клонирует ваш проект в свою собственную среду разработки, он может использовать флаг —dev,

pipenv install --dev

и установите все зависимости, включая пакеты разработки.

Чтобы активировать виртуальную среду, связанную с вашим проектом Python, вы можете просто использовать ключевое слово shell,

pipenv shell

ы также можете вызывать команды оболочки в вашей виртуальной среде, без явной предварительной активации, используя ключевое слово run. Например,

pipenv run which python

выполнит команду which python в вашей виртуальной среде и отобразит путь, по которому находится исполняемый файл python, связанный с вашей виртуальной средой. Эта функция представляет собой удобный способ запуска собственного кода Python в виртуальной среде.

pipenv run python my_project.py

Если вам нравятся я и вам не терпится вводить так много раз, когда вы хотите запустить Python, вы всегда можете установить псевдоним в своей оболочке, например,

alias prp="pipenv run python"

Я надеюсь, что этот пост показал вам, как управлять проектами Python с помощью Pipenv. Он существует уже давно, поэтому мне, например, и мне интересно смотреть, как он развивается. Я, конечно, не хочу или не ожидаю, что он станет точно таким же, как Bundler для Ruby, но я определенно буду защищать его за упрощение управления зависимостями в проектах Python. Я надеюсь, что вы тоже!

Плагин рейтинга создан автором этого блога. Буду очень признателен, если вы сможете его поддержать (ссылка)

p.s. Если статья была полезной и вас переполняет чувство благодарности, можете поддержать меня долларом на патреоне

Об авторе

Web Developer. I have expirience in FrontEnd, Backend, Devops. PHP, Python, Javascript (Vue.js, React.js)

Смотреть посты