Выбор основной версии интерпретатора Python

Раздел: Администрирование -> Управление версиями Python

Основные способы установки версии Python по умолчанию

Как сделать так, чтобы команда python всегда вызывала нужную версию?

Способ 1: update-alternatives (Debian/Ubuntu и производные)

Этот метод является наиболее системным и простым в поддержке. Он позволяет централизованно управлять альтернативами для исполняемых файлов.

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.10 1
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.11 2

Python default version (версия python по умолчанию)

После регистрации альтернатив можно переключаться между ними:

sudo update-alternatives --config python

Python update (обновление python)

Откроется меню, где выбирается номер версии. Текущая версия проверяется командой:

python --version

Python last version (последняя версия python)

Возможная проблема: Если после настройки команда python все еще указывает на старую версию, проверьте, не заблокирован ли путь в PATH, или не удалён ли файл python. Ошибка: «update-alternatives: error: no alternatives for python» – значит, не зарегистрирована ни одна альтернатива. Решение: убедиться, что пути к исполняемым файлам верны и повторить установку.

Цель: администратору, управляющему множеством серверов, требуется единая точка изменения версии Python для всех пользователей.

Как изменить версию Python только для своего пользователя?

Способ 2: символьная ссылка (symlink) в домашней директории

Создаётся символическая ссылка на нужный интерпретатор в каталоге ~/bin (предварительно добавленном в PATH).

mkdir -p ~/bin
ln -sf /usr/bin/python3.11 ~/bin/python
export PATH="$HOME/bin:$PATH"

Для постоянного использования строку export добавляют в ~/.bashrc или ~/.profile.

Возможная проблема: Если команда python продолжает использовать версию из /usr/bin, проверьте порядок в PATH. Ошибка: «python: command not found» после удаления ссылки – решение: создать новую ссылку или заново экспортировать PATH.

Цель: разработчику, которому нужна другая версия Python для одного проекта, не затрагивая остальных пользователей системы.

Как быстро переключаться между версиями без прав суперпользователя?

Способ 3: псевдоним (alias) в оболочке

В файл ~/.bashrc добавляется:

alias python='/usr/bin/python3.11'

Для вступления в силу команда source ~/.bashrc. Версия python будет использоваться только в интерактивных сессиях.

Возможная проблема: Псевдоним не работает в скриптах или в subshell. Решение: использовать симлинк или переменную PATH.

Цель: временное тестирование новой версии или быстрый доступ к старому интерпретатору.

Как задать версию Python для системы в целом без update-alternatives?

Способ 4: изменение PATH в глобальных профилях

В файл /etc/profile.d/python.sh добавляется:

export PATH="/usr/local/python3.11/bin:$PATH"

Затем дать права на выполнение и перелогиниться. Команда python берётся из первой директории в PATH.

Возможная проблема: Если в нескольких директориях присутствуют symlink с именем python, результат будет зависеть от порядка. Ошибка: «cannot execute binary file: Exec format error» – чаще всего из-за несовместимости архитектуры.

Цель: администратору, не желающему использовать механизм альтернатив, но требующему глобального изменения.

Как изолировать версии Python для разных проектов?

Способ 5: использование pyenv

pyenv позволяет устанавливать несколько версий Python и переключаться между ними локально для проекта.

pyenv install 3.11.2
pyenv global 3.11.2    # для всей системы пользователя
pyenv local 3.10.0     # для конкретной директории

Файл .python-version создаётся в корне проекта.

Возможная проблема: Если команда python не перенаправляется pyenv, проверьте eval "$(pyenv init -)" в ~/.bashrc. Ошибка: «pyenv: python: command not found (the latest version is ...)» – решение: выполнить pyenv rehash.

Цель: разработчикам, работающим над несколькими проектами с разными требованиями к версии Python.

Расширенные примеры настройки версии Python

Пример 1. Многопользовательская конфигурация через update-alternatives с приоритетами

Зарегистрируем три версии Python (3.9, 3.10, 3.11) так, чтобы автоматически выбиралась наиболее приоритетная.

Пример
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.9 10
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.10 20
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.11 30

Проверка текущей версии:

python --version
Python 3.11.2

По умолчанию выбрана версия с наивысшим приоритетом (30). Если нужно временно её изменить, используется sudo update-alternatives --config python.

Пример 2. Переключение версий через pyenv для конкретного проекта и отслеживание зависимостей

Создаём проект с Python 3.9, устанавливаем зависимости, затем переключаемся на 3.11 и видим разницу.

Пример
cd ~/myproject
pyenv local 3.9.16
echo "print('Python 3.9')" > test.py
docker run python:3.9-alpine python test.py  # вывод: Python 3.9
Пример
pyenv local 3.11.2
echo "import sys; print(sys.version)" > test.py
python test.py
3.11.2 (main, Dec 10 2023, 10:00:00) [GCC 12.2.0]

Обратите внимание: файл .python-version в корне проекта автоматически определяет, какой интерпретатор использовать при вызове python внутри директории.

Пример 3. Комбинирование symlink и виртуального окружения для тестирования

Создадим несколько виртуальных окружений с разными версиями Python, а для быстрого доступа настроим симлинк:

Пример
/usr/bin/python3.10 -m venv ~/venvs/venv310
/usr/bin/python3.11 -m venv ~/venvs/venv311
ln -sf ~/venvs/venv311/bin/python ~/bin/python3.11

Теперь, если активировать venv310, команда python внутри будет версии 3.10, а по symlink в ~/bin – версии 3.11.

Пример
source ~/venvs/venv310/bin/activate
python --version   # Python 3.10.x
~/bin/python3.11 --version  # Python 3.11.x

Пример 4. Использование модуля scl (Software Collections) для Red Hat/CentOS

Устанавливаем коллекцию rh-python38 и активируем её:

Пример
scl enable rh-python38 bash
python --version

Вывод:

Python 3.8.13

После выхода из оболочки версия возвращается к системной. Для постоянного включения можно добавить в ~/.bashrc: source /opt/rh/rh-python38/enable.

Пример 5. Установка версии Python только для выполнения скриптов через shebang

В начале скрипта указывается конкретный интерпретатор. System-wide это не меняет, но для автоматизации полезно:

Пример
#!/usr/bin/env python3.10
print('This script runs with Python 3.10')

Затем делается chmod +x script.py и запуск без указания версии. Shebang обеспечивает исполнение именно этой версии.

Версия Python по умолчанию - comments

En
Python default version (python)