Вместо нескольких утилит для управления Python-окружениями можно использовать один инструмент — uv. Он объединяет работу с зависимостями, окружениями и версиями Python.
🔢 Что умеет:
Управление виртуальными окружениями:
uv venv
uv pip install -r requirements.txt
Создание окружения и установка зависимостей из lockfile одной командой:
uv sync
Запуск проекта без ручной активации окружения:
uv run python script.py
Управление версиями Python без pyenv:
uv python install 3.13
uv python pin 3.13
Запуск CLI-инструментов без установки в систему:
uv tool run ruff check .
❓ Почему это удобно в CI/CD
Новые окружения создаются значительно быстрее, чем при использовании классического pip, что сокращает время выполнения пайплайнов.
Пример для GitHub Actions:
- uses: astral-sh/setup-uv@v6
- run: uv sync --frozen
- run: uv run pytest
Флаг
--frozen гарантирует воспроизводимую сборку: зависимости устанавливаются строго из uv.lock без их пересчёта.Не забывайте про uv.lock
uv создаёт lockfile с зафиксированными версиями и хэшами зависимостей. Его стоит хранить в репозитории так же, как package-lock.json или Cargo.lock.
⚠️ И ещё одна хорошая практика
Закрепляйте версии GitHub Actions (
@v6, а не @latest). Это делает пайплайны более предсказуемыми и защищает от неожиданных изменений после обновлений.🔗 Ссылка на GitHub
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека devops'a
#арсенал_инженера
