[Перевод] Настраиваем окружение Python с помощью pyenv, virtualenvwrapper, tox и pip-compile
Эти инструменты упростят настройку и позволит автоматизировать рутинные операции. Они избавят разработчика от многих сложностей, которые мешают сосредоточиться на решении задач и комфортном написании кода.
Есть много способов настройки окружения Python. В этом материале об одном из них. Но это, безусловно, не является единственным решением.
Python — это язык программирования общего назначения, который часто рекомендуют начинающим. За двадцать лет его существования написано несколько книг по Python. Хотя язык часто называют простым, настройка инструментария Python для разработки далеко не самая простая задача.
Настройка окружения Python достаточно сложна: xkcd
Используйте pyenv для управления версиями
На мой взгляд, это лучший менеджер версий Python. Однако стоит отметить, что pyenv работает на Linux, Mac OS X и WSL2: то есть, трёх «UNIX-подобных» средах.
Установка самого pyenv иногда может оказаться непростой. Но может помочь специальный установщик pyenv, который использует curl | bash для начальной загрузки.
Если вы используете Mac (или другую систему, в которой вы запускаете Homebrew), вы можете прочитать инструкции по установке и использованию pyenv здесь.
После установки и настройки pyenv вы можете использовать pyenv global для установки версии Python по умолчанию. Можете выбрать свою «любимую» версию. Обычно это самая последняя стабильная версия, но это не точно -)
Используйте virtualenvwrapper для настройки виртуального окружения
Для Python можно создавать виртуальные окружения, то есть помещать каждый проект в изолированную среду. Это можно сделать с помощью virtualenvwrapper. Тогда появляется возможность переключаться между виртуальными окружениями в любой момент.
Подробнее о настройке виртуального окружения можно прочесть здесь.
Если вам нужно многократно создавать и использовать одно и то же виртуальное окружение, имеет смысл автоматизировать процесс. На сегодняшний день мой выбор — это tox.
Используйте tox для автоматизации
Tox — отличный инструмент для автоматизации ваших тестов. В каждом окружении Python я создаю файл tox.ini. Независимо от того, какую систему я использую для непрерывной интеграции, всё будет работать. И я могу запустить его локально с помощью virtualenvwrapper:
$ workon runner
$ tox
Дело в том, что я тестирую свой код на нескольких версиях Python и нескольких версиях библиотечных зависимостей. Это означает, что tox будет работать в нескольких средах. В некоторых из них будут актуальные зависимости. В некоторых — замороженные. Я мог бы также сгенерировать их локально с помощью pip-compile.
В последнее время я рассматриваю nox как на замену tox. В этой статье я не буду объяснять причины, но вам стоит обратить на него внимание.
Используйте pip-compile для управления зависимостями
Python каждый раз загружает свои зависимости на этапе выполнения кода. Понимание и контроль того, какая версия зависимостей используется поможет избежать неожиданных сбоев во время работы программы. Это означает, что мы должны подумать об инструментах управления зависимостями.
Для каждого нового проекта я подключаю файл require.in, который (как правило) содержит только один символ:
.
Да, тут всё правильно. Строка с одной точкой. В файле setup.pyfile для зависимостей я прописываю Twisted> = 17.5 вместо Twisted == 18.1, которая затрудняет обновление до новых версий библиотеки.
».» означает «текущий каталог», в котором соответствующий файл setup.py используется в качестве источника информации о зависимостях.
Это означает, что при использовании pip-compile requirements.in > requirements.txt будет создан файл с замороженными зависимостями. Вы можете использовать этот файл зависимостей либо в виртуальной среде, созданной virtualenvwrapper, либо в tox.ini.
Иногда может пригодиться файл requirements-dev.txt, сгенерированный из requirements-dev.in (contents: .[dev]) или requirements-test.txt, сгенерированный из requirements-test.in (contents: .[test]).
В качестве альтернативы pip-compile можно использовать dephell. У инструмента dephell есть много интересностей, например, использование асинхронных HTTP-запросов для загрузки зависимостей.
Вывод
Я считаю Python мощным и красивым языком. Тем не менее, чтобы продуктивно работать, я использую определенный набор инструментов, которые доказали свою эффективность, по крайней мере для меня. Поэтому используйте эти четыре инструмента — pyenv, virtualenvwrapper, tox и pip-compile — и будет вам счастье =)
На правах рекламы
Встречайте! Впервые в России — эпичные серверы!
Мощные серверы на базе новейших процессоров AMD EPYC. Частота процессора до 3.4 GHz. Тарифы — от 10 рублей в сутки!