Короткий ответ: системный /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.
Как работать каждый день
Два рабочих режима, выбирайте один и не смешивайте в голове.
- Явные команды. Из корня проекта:
mise exec -- python script.py,mise exec -- uv pip install -r requirements.txt. Работает в cron и в SSH без activate. - Активированный 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 не активировал окружение, чините конфиг, не ставьте пакеты в систему.