PYPROGLIB Telegram 6918
🗂 Как перевести Python/Django-проект на uv

Если вы устали от несовпадений между локальными зависимостями, CI и продом, попробуйте перейти на uv — современный инструмент для управления окружением и зависимостями Python.

Вот краткий план, как это сделать:

1️⃣ Настройка pyproject.toml

Создайте или обновите pyproject.toml с базовой информацией о проекте:
[project]
name = "my-product"
version = "1.2.3"
description = "Our amazing product."
readme = "README.md"
requires-python = "~=3.12"
dependencies = []


2️⃣ Перенос зависимостей

Вместо 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


3️⃣ Установка и фиксация Python

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!

4️⃣ Обновление .envrc (если вы используете direnv)

sed -e '/layout python/ s/^#*/#/' -i .envrc
echo 'export PATH="$(pwd)/.venv/bin:${PATH}"' >> .envrc
direnv allow


5️⃣ Docker

Базовый образ:
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


6️⃣ Подключаем pre-commit

В .pre-commit-config.yaml:
- repo: https://github.com/astral-sh/uv-pre-commit
rev: 0.7.12
hooks:
- id: uv-lock


7️⃣ GitHub Actions

- 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


Библиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍122🔥2😁1



tgoop.com/pyproglib/6918
Create:
Last Update:

🗂 Как перевести Python/Django-проект на uv

Если вы устали от несовпадений между локальными зависимостями, CI и продом, попробуйте перейти на uv — современный инструмент для управления окружением и зависимостями Python.

Вот краткий план, как это сделать:

1️⃣ Настройка pyproject.toml

Создайте или обновите pyproject.toml с базовой информацией о проекте:

[project]
name = "my-product"
version = "1.2.3"
description = "Our amazing product."
readme = "README.md"
requires-python = "~=3.12"
dependencies = []


2️⃣ Перенос зависимостей

Вместо 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


3️⃣ Установка и фиксация Python

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!

4️⃣ Обновление .envrc (если вы используете direnv)

sed -e '/layout python/ s/^#*/#/' -i .envrc
echo 'export PATH="$(pwd)/.venv/bin:${PATH}"' >> .envrc
direnv allow


5️⃣ Docker

Базовый образ:
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


6️⃣ Подключаем pre-commit

В .pre-commit-config.yaml:
- repo: https://github.com/astral-sh/uv-pre-commit
rev: 0.7.12
hooks:
- id: uv-lock


7️⃣ GitHub Actions

- 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


Библиотека питониста #буст

BY Библиотека питониста | Python, Django, Flask




Share with your friend now:
tgoop.com/pyproglib/6918

View MORE
Open in Telegram


Telegram News

Date: |

To upload a logo, click the Menu icon and select “Manage Channel.” In a new window, hit the Camera icon. Matt Hussey, editorial director of NEAR Protocol (and former editor-in-chief of Decrypt) responded to the news of the Telegram group with “#meIRL.” To edit your name or bio, click the Menu icon and select “Manage Channel.” How to create a business channel on Telegram? (Tutorial) During a meeting with the president of the Supreme Electoral Court (TSE) on June 6, Telegram's Vice President Ilya Perekopsky announced the initiatives. According to the executive, Brazil is the first country in the world where Telegram is introducing the features, which could be expanded to other countries facing threats to democracy through the dissemination of false content.
from us


Telegram Библиотека питониста | Python, Django, Flask
FROM American