Не стесняйтесь клонировать мой образец репозитория 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
линтинг для сборки пакетов.
Удачного кодирования! 🧑🏻💻