Не стесняйтесь клонировать мой образец репозитория GitHub и следить за ним при чтении этого блога 👍

Два моих любимых инструмента для автоматизации рабочего процесса при разработке проектов - как личных, так и профессиональных - это мощная пара tox и poetry. Сочетание этих двух инструментов упрощает линтинг, тестирование и виртуализацию моего кода в нескольких версиях Python!

Я по-настоящему презираю управление несколькими версиями пакетов Python и Python вне виртуальной среды Python. После всего лишь одного или двух проектов с горсткой зависимостей, чтобы все работало правильно, становится запутанной неразберихой. Изменение зависимости в одном проекте не должно никоим образом влиять на другие проекты на вашем компьютере. Зависимости и версии Python между проектами должны быть идемпотентными. Нецелесообразно вручную управлять проектами с течением времени, поскольку новые версии Python и обновления пакетов выпускаются без использования виртуальных сред Python, не нарушая работу другого проекта на вашем компьютере.

Вот краткое введение для этого динамичного дуэта:

поэзия

Если вы не знакомы с poetry, он выполняет ту же роль, что и setup.py или pipenv, но предлагает немного больше гибкости, функциональности и, судя по моему собственному опыту, с ним легче работать. Со своей страницы GitHub:

Поэзия: управление зависимостями для Python

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

Хотя назначение poetry в значительной степени взаимозаменяемо с pipenv, в последнее время я перешел с pipenv из-за частых перерывов в выпуске новых выпусков и того, что блокировка и установка пакетов в некоторых моих проектах происходит значительно медленнее. Кроме того, poetry выглядит и ощущается немного более современным при взаимодействии с ним. poetry в последнее время тоже набирает обороты по сравнению с pipenv с точки зрения количества загрузок.

токсичный

tox - это, по сути, инструмент для манипулирования различными виртуальными средами Python (подумайте о разных версиях Python) и запуска команд против них. Со своего сайта:

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

Создание токсичной рабочей среды

Нужно немного поработать, чтобы poetry и tox хорошо играли вместе. К счастью, все довольно просто. Преимущество такой настройки проекта заключается в том, что он уменьшает количество глобально установленных пакетов и позволяет тестировать код в любом количестве возможных сред (подумайте о запуске тестов для Python 3.7 и 3.8).

В следующем примере мы создадим проект, который использует poetry для управления зависимостями, tox для автоматизации тестирования и pytest в качестве средства выполнения тестов для демонстрации того, как все эти инструменты работают вместе и какую пользу они принесут вашему проекту. Этот пример будет нацелен как на Python 3.7, так и на Python 3.8. Позже мы воспользуемся преимуществом новой функции в Python 3.8 - самодокументированные f-строки - чтобы продемонстрировать, как тесты не пройдут для Python 3.7, но пройдут для Python 3.8. На вашем компьютере должны быть установлены все версии Python, которые вы хотите протестировать.

pyproject.toml

У этого pyproject.toml есть две зависимости разработки, одна для pytest, а другая для tox. Этот файл poetry читает для создания файла блокировки и установки запрошенных пакетов. Нет необходимости указывать poetry в качестве зависимости, поскольку это должен быть один из немногих пакетов, которые вы установили глобально.

tox.ini

Вышеупомянутый файл tox.ini будет служить точкой входа в нашу программу для целей тестирования, когда мы запустим tox из командной строки. Строка 3 инструктирует tox выполнить шаги, описанные в нашем разделе [testenv], для Python 3.7 и Python 3.8 последовательно.

Заключительные слова

Когда все будет готово, просто запустите tox из командной строки. В нашем примере у нас есть один тест, и он будет выполняться в общей сложности два раза, по одному для каждой версии Python. По умолчанию один тест не пройден, а другой - успешно. Укажите, какая строка закомментирована в python_version_printer.py, и оба теста пройдут.

Использование tox с poetry упрощает управление зависимостями, особенно если вам нужно работать над несколькими разными проектами Python. В последние годы создание и использование виртуальных сред Python стало проще и проще, устраняя препятствия. От оригинального Python virtualenv к прогрессивно совершенствующемуся pipenv и к современному poetry.

tox не ограничивается только установкой зависимостей и запуском модульных тестов. Существует целый ряд tox плагинов и скриптов, которые вы можете настроить, чтобы расширить возможности того, что происходит при запуске tox, например, flake8 линтинг для сборки пакетов.

Удачного кодирования! 🧑🏻‍💻

GitHub | LinkedIn | Средний | Budw.in