Введение
Когда вы создаёте библиотеку или приложение на Python, важно убедиться, что оно работает на разных версиях интерпретатора. Особенно если вы публикуете пакет на PyPI. Вручную устанавливать Python 3.7, 3.8, 3.9 и прогонять тесты — долго и неудобно.
Здесь помогает tox – тестирование на разных версиях Python — инструмент, который автоматизирует запуск тестов в изолированных окружениях с разными интерпретаторами, устанавливает зависимости и обеспечивает воспроизводимость.
Установка и настройка tox
Установка:
Создание файла конфигурации tox.ini
:
Основы работы с tox
-
tox
автоматически создаёт виртуальные окружения:tox -e py39
-
Устанавливает зависимости из
deps
-
Выполняет команду, указанную в
commands
-
Работает с любой системой тестирования:
pytest
,unittest
,nose
Запуск всех окружений:
Конфигурация tox.ini
Минимальный пример:
Настройка специфичных окружений:
Тестирование на разных версиях Python
-
В
envlist
указываются псевдонимы окружений:py38
,py39
,py310
-
Tox ищет соответствующий Python-интерпретатор в вашей системе
-
Используйте pyenv или asdf для установки нужных версий
Проверка доступных интерпретаторов:
Управление зависимостями
Вы можете:
-
Указывать зависимости явно:
-
Загружать их из файла:
-
Использовать
pyproject.toml
черезtox >= 4.0
иtox-pdm
,tox-poetry
Расширенные конфигурации и параллелизм
Запуск тестов параллельно:
Использование специфичных переменных окружения:
Тестирование дополнительных сценариев
Пример проверки кода линтером и форматером:
Добавление проверки типов:
Интеграция с CI/CD
GitHub Actions
GitLab CI
Работа с pyproject.toml
и PEP 621
Tox 4.0 и выше умеет читать зависимости из pyproject.toml
, поддерживает современные менеджеры зависимостей: Poetry, PDM, Hatch.
Для интеграции:
Плагины и расширения tox
-
tox-gh-actions
— автоматизация matrix-окружений -
tox-conda
— окружения через Conda -
tox-pdm
,tox-poetry
— работа с альтернативными менеджерами
Установка:
Отладка и логирование
Полный вывод команд:
Показ всех логов:
Удаление кэша:
Сравнение с другими инструментами
Инструмент | Мульти-Python | Параллельность | Поддержка Pyproject | Простота |
---|---|---|---|---|
tox | Да | Да | Частично (с плагинами) | Высокая |
nox | Да | Да | Да | Средняя |
virtualenv | Нет | Нет | Нет | Высокая |
Советы по оптимизации и best practices
-
Используйте
tox -e
для запуска одного окружения -
Удаляйте неиспользуемые зависимости
-
Храните
tox.ini
в корне проекта -
Кэшируйте tox в CI/CD для ускорения сборки
Часто задаваемые вопросы (FAQ)
1. Что такое tox?
Это инструмент для автоматического тестирования Python-кода в изолированных окружениях с разными версиями Python.
2. Как задать зависимости для окружений?
Через секцию deps
или requirements.txt
.
3. Можно ли запускать линтеры и типизацию?
Да, через отдельные testenv
.
4. Где установить несколько версий Python?
Через pyenv
, asdf
, system packages.
5. Как использовать с Pytest?
Укажите deps = pytest
, commands = pytest
.
6. Поддерживает ли tox pyproject.toml
?
С версии 4.0 и выше — да, через плагины.
Полный справочник по ключевым функциям и модулям библиотеки Tox для Python
Установка
Базовое использование
Структура конфигурации (файл tox.ini
)
Секция | Описание |
---|---|
[tox] |
Основные параметры (например, список версий). |
[testenv] |
Базовая среда для тестов. |
[testenv:<name>] |
Индивидуальные среды. |
Полный пример tox.ini
Поддержка нескольких версий Python
Возможность | Описание |
---|---|
envlist = py36, py37, py38 |
Автоматический запуск на нескольких версиях. |
Требуется, чтобы соответствующие Python были установлены в системе. |
Установка зависимостей
Опция | Описание |
---|---|
deps = package |
Установка зависимостей в виртуальную среду. |
deps = -r requirements.txt |
Использование pip-файла. |
Команды и выполнение
Опция | Описание |
---|---|
commands = ... |
Команды, которые будут выполнены (одна или несколько). |
passenv = VAR |
Передача переменных окружения. |
setenv = KEY=VALUE |
Установка переменных окружения в среде. |
Указание интерпретатора
Переиспользование среды (ускорение)
Или запустить с флагом --skip-pkg-install
или -r
для пересборки.
Запуск произвольных команд (например, black, isort, coverage)
Поддержка дополнительных плагинов
Плагин | Назначение |
---|---|
tox-gh-actions |
Поддержка GitHub Actions |
tox-pyenv |
Поиск версий Python через pyenv |
tox-docker |
Запуск окружений с помощью Docker-контейнеров |
Интеграция с GitHub Actions (через tox-gh-actions
)
Параллельный запуск сред
Флаг | Описание |
---|---|
-p или --parallel |
Запуск сред параллельно. |
--parallel-live |
Вывод логов в реальном времени. |