Настройка Python 3 в Ubuntu для администрирования

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

Администрирование версий Python 3 на Ubuntu

Работа с разными версиями Python 3 в операционной системе Ubuntu требует понимания доступных инструментов и возможных проблем. Ниже рассматриваются основные вариантов установки и переключения, а также типичные ошибки и способы их устранения.

Основной способ: установка через deadsnakes PPA и настройка update-alternatives

Этот метод подходит для системного администрирования, когда требуется зафиксировать конкретную версию Python 3 без изменения системного интерпретатора. Репозиторий deadsnakes содержит свежие сборки Python для Ubuntu.

Последовательность действий:

sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa -y
sudo apt install python3.11 python3.11-venv python3.11-dev

Python 3 ubuntu (python 3 на ubuntu)

После установки пакета python3.11 проверяется версия командой python3.11 --version. Системная команда python3 остаётся неизменной. Для глобального переключения используется update-alternatives:

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

В интерактивном меню выбирается нужная версия. После этого python3 --version показывает выбранную версию.

Ошибка: update-alternatives не найдена команда

Пакет dpkg обычно уже установлен. Если команда отсутствует, устанавливается из репозитория: sudo apt install dpkg.

Проблема: после переключения сломались системные утилиты

Некоторые скрипты в Ubuntu могут ожидать определённую версию Python (например, 3.10). Восстановление выполняется командой sudo update-alternatives --config python3 и выбором версии с меньшим приоритетом.

Как управлять версиями Python для изолированной разработки с помощью pyenv?

pyenv устанавливает отдельные версии Python в домашнюю директорию, не затрагивая системный интерпретатор. Этот вариант предпочтителен для разработчиков, работающих над несколькими проектами.

curl https://pyenv.run | bash
# В файл ~/.bashrc добавляются строки:
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"

После перезагрузки терминала устанавливается нужная версия:

pyenv install 3.12.0
pyenv global 3.12.0
pyenv local 3.11.0  # для конкретного проекта

Команда pyenv versions показывает установленные версии. Для создания виртуального окружения используется плагин pyenv-virtualenv.

Ошибка при компиляции: build failed

Для сборки Python из исходников (pyenv загружает исходный код) требуются зависимости. Их установка:

sudo apt install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev

Как установить самую свежую версию Python из исходного кода?

Сборка из исходников даёт полный контроль над опциями компиляции и позволяет получить версию, недоступную в репозиториях. Подходит для тестирования новых возможностей.

wget https://www.python.org/ftp/python/3.13.0/Python-3.13.0.tgz
tar -xf Python-3.13.0.tgz
cd Python-3.13.0
./configure --enable-optimizations
make -j$(nproc)
sudo make altinstall

Флаг --enable-optimizations включает оптимизацию профилирования. Команда make altinstall не перезаписывает системный python3, устанавливая бинарник python3.13. Запуск интерпретатора: python3.13 --version.

Ошибка: pip не обнаружен

После сборки pip может отсутствовать. Его установка: python3.13 -m ensurepip --upgrade или установка через apt пакета python3-pip (но он привяжется к системной версии).

Проблема: символьные ссылки конфликтуют

Чтобы избежать путаницы, рекомендуется не связывать /usr/bin/python3 с новым бинарником, а использовать прямой вызов или alias.

Как использовать официальные системные пакеты Python 3 без сторонних репозиториев?

В стандартных репозиториях Ubuntu находятся пакеты python3.10, python3.11 и т.д. для некоторых LTS-версий. Этот способ подходит, если требуемая версия уже есть в репозитории.

sudo apt install python3.11 python3.11-venv python3.11-dev

Однако такой метод не позволяет переключить глобальную команду python3 без update-alternatives. Для использования конкретной версии всегда вызывается python3.11. Виртуальные окружения создаются с указанием версии:

python3.11 -m venv myenv
source myenv/bin/activate

Пакет не найден: E: Unable to locate package python3.12

Если версия отсутствует в репозитории, используется deadsnakes PPA или сборка из исходников.

Общие рекомендации:

  • Для системных сервисов лучше не менять глобальный python3, а указывать путь к конкретному интерпретатору в скриптах.
  • При использовании виртуальных окружений версия Python фиксируется в файле .python-version для pyenv или указывается при создании вручную.
  • Резервное копирование системного интерпретатора перед экспериментами исключит риск поломки.

Расширенные примеры и детальные инструкции

Пример 1: полная установка Python 3.11 через deadsnakes с проверкой

Процесс установки и верификация версии:

Пример
# Добавление PPA
sudo apt update
sudo apt install software-properties-common -y
sudo add-apt-repository ppa:deadsnakes/ppa -y
sudo apt update

# Установка Python 3.11 и необходимых компонентов
sudo apt install python3.11 python3.11-venv python3.11-dev -y

# Проверка
python3.11 --version
Python 3.11.9

После этого для глобального использования настраивается update-alternatives. Результат переключения:

Пример
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 2
sudo update-alternatives --config python3

Выбор пункта 2 (python3.11) приводит к тому, что команда python3 --version выдаёт:

Python 3.11.9

Пример 2: использование pyenv с виртуальным окружением

Установка pyenv, создание окружения и проверка изоляции:

Пример
# Установка pyenv (предполагается, что curl установлен)
curl https://pyenv.run | bash
# Добавление в ~/.bashrc
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init --path)"' >> ~/.bashrc
source ~/.bashrc

# Установка Python 3.11.0
pyenv install 3.11.0

# Создание виртуального окружения с помощью pyenv-virtualenv
pyenv virtualenv 3.11.0 myproject

# Активация окружения
pyenv activate myproject

# Проверка версии внутри окружения
python --version
Python 3.11.0

Вне окружения версия остаётся исходной (системной или глобальной). Деактивация:

Пример
pyenv deactivate

Пример 3: сборка Python 3.13 из исходников с оптимизациями

Полный процесс с указанием проблем и решений:

Пример
# Установка зависимостей для сборки
sudo apt install -y build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev

# Скачивание исходников
wget https://www.python.org/ftp/python/3.13.0/Python-3.13.0.tgz
tar -xf Python-3.13.0.tgz
cd Python-3.13.0

# Конфигурация с профилированием и включением поддержки всех опций
./configure --enable-optimizations --with-lto --with-ensurepip=install

# Сборка в 4 потока
make -j$(nproc)

# Установка с altinstall, чтобы не заменить системный python3
sudo make altinstall

# Проверка
python3.13 --version
Python 3.13.0

Если python3.13 не найдена, проверяется правильность пути (обычно /usr/local/bin/python3.13). Для использования pip внутри этой версии выполняется:

Пример
python3.13 -m pip --version
pip 23.3.1 from /usr/local/lib/python3.13/site-packages/pip (python 3.13)

Пример 4: устранение конфликта при множественных версиях Python

Ошибка: после установки нескольких версий команда pip install может ставить пакеты не в тот интерпретатор. Решение - всегда указывать конкретную версию.

Пример
# Установка пакета для Python 3.11
python3.11 -m pip install numpy

# Установка для Python 3.10
python3.10 -m pip install requests

# Проверка установленных пакетов для каждой версии
python3.11 -m pip list | grep numpy
python3.10 -m pip list | grep requests

Вывод:

numpy 1.24.2
requests 2.31.0

Если pip отсутствует для определённой версии, его можно установить через python3.x -m ensurepip --upgrade.

Пример 5: создание скрипта для автоматического переключения версий через update-alternatives

Простой bash-скрипт, который устанавливает приоритеты для двух версий и позволяет быстро выбрать нужную:

Пример
#!/bin/bash
# Установка путей
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 2
# Запрос выбора
echo "Выберите версию Python:"
sudo update-alternatives --config python3

После выполнения скрипта пользователь видит интерактивное меню и выбирает номер. Результат:

There are 2 choices for the alternative python3 (providing /usr/bin/python3).

  Selection    Path                 Priority   Status
------------------------------------------------------------
* 0            /usr/bin/python3.11   2         auto mode
  1            /usr/bin/python3.10   1         manual mode
  2            /usr/bin/python3.11   2         manual mode

Press <enter> to keep the current choice[*], or type selection number: 1

Python 3 на Ubuntu - comments

En
Python 3 ubuntu (python)