tgoop.com/pyproglib/6918
Create:
Last Update:
Last Update:
Если вы устали от несовпадений между локальными зависимостями, CI и продом, попробуйте перейти на uv — современный инструмент для управления окружением и зависимостями Python.
Вот краткий план, как это сделать:
Создайте или обновите pyproject.toml
с базовой информацией о проекте:
[project]
name = "my-product"
version = "1.2.3"
description = "Our amazing product."
readme = "README.md"
requires-python = "~=3.12"
dependencies = []
Вместо
requirements/*.txt
теперь всё управляется через uv
:uv add -r requirements/base.txt
uv add -r requirements/dev.txt --group dev
uv add -r requirements/deploy.txt --group deploy
git rm requirements/*.txt
uv python install 3.12
uv python pin 3.12
uv sync
>
uv
создаст .venv/
и .python-version
и синхронизирует зависимости.По умолчанию
uv sync
устанавливает только dev-зависимости. Для других групп:uv sync --locked --group deploy
--no-dev
!sed -e '/layout python/ s/^#*/#/' -i .envrc
echo 'export PATH="$(pwd)/.venv/bin:${PATH}"' >> .envrc
direnv allow
Базовый образ:
FROM ghcr.io/astral-sh/uv:python3.12-bookworm
Настройка переменных:
ENV UV_COMPILE_BYTECODE=1
ENV UV_LINK_MODE=copy
ENV VIRTUAL_ENV=/venv
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
Установка зависимостей:
RUN --mount=type=cache,target=/root/.cache/uv \
--mount=type=bind,source=uv.lock,target=uv.lock \
--mount=type=bind,source=pyproject.toml,target=pyproject.toml \
set -ex \
&& uv venv $VIRTUAL_ENV \
&& uv sync --active --locked --no-install-project --no-dev --group deploy
В
.pre-commit-config.yaml
:- repo: https://github.com/astral-sh/uv-pre-commit
rev: 0.7.12
hooks:
- id: uv-lock
- uses: astral-sh/setup-uv@v1
with:
python-version: 3.12
enable-cache: true
cache-dependency-glob: "uv.lock"
- run: uv sync --locked
- run: uv run pre-commit run --all-files
- run: uv run pytest
Обновить конкретный пакет:
uv lock --upgrade-package <package-name>
uv sync --locked
Обновить всё:
uv lock --upgrade
uv sync --locked
Библиотека питониста #буст