+7 (920) 556-26-91 пн–пт: 10:00–19:00 (МСК)
Проконсультироваться

Инструкции

Как установить Python 3.14, venv и uv через mise

Системный python3 Ubuntu не трогаем. 3.14 ставит mise, окружение — venv, пакеты — uv.

Как установить Python 3.14, venv и uv через mise

Короткий ответ: системный /usr/bin/python3 на Ubuntu 24.04 — это 3.12.3, его нельзя заменять и нельзя «обновлять» поверх. Свой интерпретатор ставьте через mise use -g python@3.14 (на 13–14 сентября 2026 это bugfix 3.14.7), зависимости — только в venv, пакетный менеджер — uv через mise use -g uv@latest.

Этот гайд рассчитан на чистый VPS Ubuntu 24.04 LTS. Предполагается, что сервер уже обновлён и на нём стоит mise — см. первую настройку Ubuntu 24.04 и установку mise. Команды копируйте целиком. После каждого критичного шага есть проверка: если вывод не совпал — остановитесь, не идите дальше.

Почему нельзя трогать системный Python

На Ubuntu 24.04 пакет python3 из репозитория — это метапакет на ветку 3.12. По состоянию на середину сентября 2026 в noble это 3.12.3 (пакет python3 в noble). Им пользуются apt, unattended-upgrades, cloud-init и десятки служебных скриптов. Если подменить /usr/bin/python3 на 3.14, симлинк сломается, часть утилит начнёт падать с ModuleNotFoundError, а «починить одной командой» уже не выйдет.

Правило простое: системный интерпретатор — только для системы. Для ваших скриптов, ботов, бэкендов и CI — отдельная копия Python, которую ставит mise, плюс виртуальное окружение проекта. Так же, как Node.js и Java 21 в этой серии: рантайм живёт в каталоге mise, а не в /usr.

  • Не ставьте deadsnakes и не делайте ln -sf на /usr/bin/python3.
  • Не запускайте pip install в системный site-packages (ни с sudo, ни с --break-system-packages «на всякий случай»).
  • Не удаляйте пакет python3: без него apt сам себе подножку.

Проверьте, что система цела, ещё до установки 3.14:

/usr/bin/python3 --version
ls -l /usr/bin/python3
dpkg -l python3 python3.12 | awk 'NR==1 || /^ii/'

Ожидаемо: Python 3.12.3, симлинк на python3.12, пакеты в статусе ii. Если здесь уже не 3.12.3 — сначала верните системный Python, не ставьте 3.14 поверх поломки.

Что ставим и зачем

Компонент Откуда Роль
Python 3.12.3 apt, /usr/bin/python3 Только система. Не трогаем.
Python 3.14.7 mise use -g python@3.14 Ваш интерпретатор. 3.14.7 — седьмой bugfix ветки 3.14, релиз 5 августа 2026.
uv mise use -g uv@latest Быстрый pip/venv от Astral. mise сам использует uv, если он установлен.
.venv _.python.venv в mise.toml Изоляция пакетов проекта. Не глобальный install.

Документация: релиз Python 3.14.7, venv в stdlib, Python в mise, uv.

Ставим Python 3.14 через mise

Сначала убедитесь, что mise отвечает. Если команда не находится — вернитесь к установке mise, не ставьте Python другим способом.

mise --version
command -v mise

Глобальный интерпретатор 3.14 (личный дефолт пользователя, не системы):

mise use -g python@3.14
mise ls python
mise exec -- python --version
mise exec -- python -c 'import sys; print(sys.executable)'
/usr/bin/python3 --version

Проверка, без которой нельзя идти дальше:

  • mise exec -- python --version печатает Python 3.14.7 (или другой patch 3.14.x, если вы читаете текст позже 3.14.7; на 13–14 сентября 2026 канон — 3.14.7).
  • Путь исполняемого файла — внутри каталога mise (обычно ~/.local/share/mise/installs/python/...), не /usr/bin/python3.
  • /usr/bin/python3 --version по-прежнему Python 3.12.3.

Команда mise use -g python@3.14 записывает версию в глобальный конфиг mise (как правило ~/.config/mise/config.toml) и скачивает рантайм. Это не пакет apt и не замена /usr/bin/python3. Если нужен именно 3.14.7, а не «последний 3.14.x», можно указать mise use -g python@3.14.7.

Пока вы не сделали mise activate в shell, обычный python3 в новой сессии SSH всё ещё может быть системным — это нормально. Для разовых команд безопаснее mise exec -- ...: он всегда берёт версию из конфига mise.

Ставим uv

uv — установщик пакетов и создатель venv. mise умеет создавать виртуальное окружение через стандартный python -m venv, но если uv установлен, mise использует uv. Так и нужно.

mise use -g uv@latest
mise exec -- uv --version
mise exec -- which uv

Версию uv в этом тексте не фиксируем: ставьте uv@latest, как в каноне серии. Проверка: команда uv --version через mise exec печатает строку вида uv ..., путь — снова из каталога mise, не из /usr/bin.

Не ставьте uv через pip install uv в системный Python и не качайте случайные инсталляторы «с gist». Один инструмент версий — mise.

Проект: venv через mise.toml

Глобальный 3.14 — это ещё не проект. Пакеты ставятся в виртуальное окружение рядом с кодом. Канон mise для venv — директива _.python.venv в секции [env], не устаревшая опция virtualenv в [tools].

Создайте каталог проекта и файл mise.toml:

mkdir -p ~/apps/pyapp
cd ~/apps/pyapp
cat > mise.toml <<'EOF'
[tools]
python = "3.14"
uv = "latest"

[env]
_.python.venv = { path = ".venv", create = true }
EOF
mise trust
mise install
mise exec -- python --version
mise exec -- python -c 'import sys; print(sys.executable)'

Ожидаемый путь интерпретатора заканчивается на .venv/bin/python. Если видите shim mise или /usr/bin/python3 — venv не активировался: проверьте, что команда запущена из каталога с mise.toml, файл доверен (mise trust), в [env] именно _.python.venv = { path = ".venv", create = true }.

Добавьте .venv/ в .gitignore. Окружение создаётся на машине, в git его не кладут.

Поставьте тестовый пакет и убедитесь, что он виден только в venv:

cd ~/apps/pyapp
mise exec -- uv pip install requests
mise exec -- python -c 'import requests, sys; print(requests.__version__); print(sys.executable)'
/usr/bin/python3 -c 'import requests' || echo 'системный python requests не видит — так и должно быть'

Системный 3.12 не должен импортировать requests, если вы его туда сами не ставили. Это и есть изоляция.

Если в venv нужен классический pip (не только uv pip), при создании окружения uv его не кладёт. В mise для этого есть uv_create_args = ["--seed"] — см. конфиг _.python.venv. Для большинства задач хватает uv pip.

Как работать каждый день

Два рабочих режима, выбирайте один и не смешивайте в голове.

  1. Явные команды. Из корня проекта: mise exec -- python script.py, mise exec -- uv pip install -r requirements.txt. Работает в cron и в SSH без activate.
  2. Активированный shell. Если в профиле уже есть mise activate bash (это делается в гайде по mise), зайдите в каталог проекта — mise подхватит mise.toml, добавит .venv/bin в PATH. Тогда python и uv — уже проектные.

Проверка activate (после входа в каталог проекта):

cd ~/apps/pyapp
python --version
which python
python -c 'import sys; print(sys.prefix)'

Должны быть 3.14.x и путь внутри ~/apps/pyapp/.venv. Если which python показывает shim, а не .venv/bin/python, вы на одних шимах без activate: для venv это слабое место, официально venv в PATH попадает через mise activate или mise exec.

Минимальный скрипт, чтобы закрыть контур «установил — запустил»:

cd ~/apps/pyapp
cat > hello.py <<'EOF'
import sys
print(sys.version.split()[0])
print(sys.executable)
EOF
mise exec -- python hello.py

В выводе — 3.14.x и путь в .venv. На этом установка считается рабочей.

Что ломается чаще всего

  • Поставили python3.14 из случайного PPA. Снесите PPA, верните apt-пакеты Ubuntu, ставьте только через mise.
  • pip install под sudo. Пакеты попадут в систему. Удалять потом больнее, чем поставить venv сразу.
  • Два объявления venv сразу. Не включайте одновременно python.uv_venv_auto и _.python.venv «на всякий». Для этого гайда канон — только _.python.venv.
  • Шимы без activate. which python указывает на shim, пакеты «то появляются, то нет». Используйте mise exec -- или activate.
  • Сломали /usr/bin/python3. Верните пакет: sudo apt install --reinstall python3 python3.12, не «чините» симлинком на 3.14.

Дальше по серии: контейнеры — Docker CE на Ubuntu 24.04, автоматизации — n8n, TLS — nginx и Let’s Encrypt.

FAQ

Можно ли удалить Python 3.12 после установки 3.14?

Нет. 3.12.3 — зависимость apt и служебных скриптов Ubuntu 24.04. Удаление python3 ломает пакетный менеджер. 3.14 живёт рядом, в каталоге mise, и системе не мешает.

Почему не pyenv, не deadsnakes и не make altinstall?

В этой серии один менеджер рантаймов — mise. Он же ставит Node и Java, один файл mise.toml описывает проект. deadsnakes подменяет системные пути легче, чем кажется. make altinstall на VPS — лишняя сборка и зависимости компилятора. mise по умолчанию берёт готовые сборки python-build-standalone.

Чем uv лучше pip?

uv ставит пакеты и создаёт venv быстрее pip. Если uv есть в PATH mise, директива _.python.venv создаёт окружение через uv. Команды: uv pip install, uv pip freeze. Классический pip в venv не обязателен.

Как зафиксировать 3.14.7, чтобы завтра не прыгнуло на 3.14.8?

В mise.toml укажите python = "3.14.7" вместо "3.14". Префикс 3.14 означает «последний patch этой ветки». Для воспроизводимого сервера pin на 3.14.7 разумнее.

venv не создаётся, python всё ещё системный. Что смотреть?

Каталог с mise.toml, mise trust, строка _.python.venv = { path = ".venv", create = true } именно в [env], запуск через mise exec -- python -c 'import sys; print(sys.executable)'. Если executable не содержит .venv — mise не активировал окружение, чините конфиг, не ставьте пакеты в систему.

Ещё гайды