В этой статье я покажу как можно установить несколько разных версий Python 3 на Linux, на примере дистрибутива Debian 12.

Введение

Бывает так, что приходится поддерживать старый проект, например написанный на какой-нибудь из старых версий Python 3. При этом хочется использовать современную операционную систему. На Windows довольно легко установить несколько разных версий Python 3, но дистрибутивы Linux обычно в своих репозиториях хранят одну версию Python 3. Например, репозитории для Debian:

  • Debian Bookworm (12) — Python 3.11;
  • Debian Bullseye (11) — Python 3.9;
  • Debian Buster (10) — Python 3.7;
  • Debian Stretch (9) — Python 3.5, и так далее.

Но Python 3 можно установить не только из репозиториев, его можно скомпилировать из исходных кодов.

В этой статье я буду компилировать Python 3.7 на Debian 12. А затем, с помощью инструмента update-alternatives укажем какую версию Python 3 нужно использовать по умолчанию.

Кстати эта статья основана на англоязычной статье — ссылка. Но это не совсем перевод, я кое-что дополнил, а кое-что сделал по другому, но за основу взял именно эту статью.

Установка Python 3.7 на Debian 12

Подготовка

Все действия мы будем выполнять под пользователем root.

Перед компилированием обновим систему и установим необходимые пакеты. В основном это инструменты для компилирования и необходимые зависимости.

# apt update -y && apt upgrade -y
# apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libsqlite3-dev libreadline-dev libffi-dev curl libbz2-dev -y

Теперь скачаем необходимую версию Python 3, в нашем примере это Python-3.7.16.tar.xz:

# wget https://www.python.org/ftp/python/3.7.16/Python-3.7.16.tar.xz

Распакуем архив в каталог /usr/local/share/python3.7, предварительно создав его:

# mkdir -p /usr/local/share/python3.7
# tar -xf Python-3.7.16.tar.xz -C /usr/local/share/python3.7

Компилирование

Теперь войдём в этот каталог и выполним configure с необходимыми флагами:

  • Флаг —enable-optimizations предписывает сценарию выполнить несколько проверок, чтобы убедиться в наличии всех зависимостей, и оптимизирует двоичный файл Python путем запуска нескольких тестов.
  • Флаг —enable-shared создает разделяемые библиотеки, которые необходимы для определенных типов приложений.
  • Флаг —with-ensurepip=install — дополнительно установит нужную версию pip пакетного менеджера.
# cd /usr/local/share/python3.7/Python-3.7.16
# ./configure --enable-optimizations --enable-shared --with-ensurepip=install

Теперь пришло время скомпилировать исходный код с помощью команды make. Вы, дополнительно, можете указать количество потоков, для использования нескольких ядер. Например, если у вас 4 ядра, вы можете запустить компилирование в 3 потока с помощью опции -j 3.

# make -j 3

Как только компилирование будет завершена, установите двоичные файлы Python. Рекомендуется использовать команду make altinstall, чтобы избежать перезаписи двоичного файла Python по умолчанию в системе.

# make altinstall

После установки, обязательно, настройте привязки динамического компоновщика. Пропуск этого важного шага может вызвать проблемы.

# ldconfig /usr/local/share/python3.7

Давайте проверим установку, проверив версию Python, чтобы подтвердить, что установка Python 3.7 прошла успешно и готова к использованию.

# python3.7 --version
Python 3.7.16

Кстати, в системе также установлена другая версия Python 3, которая сейчас используется по умолчанию:

# python3 --version
Python 3.11.2

Настройка версии Python 3 по умолчанию

Эти версии Python находятся в разных местах файловой системы:

# which python3.7
/usr/local/bin/python3.7
# which python3
/usr/bin/python3

Теперь можем, с помощью инструмента update-alternatives, указать какую версию Python 3 использовать.

Для начала установим обе версии в качестве альтернатив. Вначале указываем путь к программе (/usr/bin/python), затем называем группу ссылок (python), затем путь к программе (/usr/local/bin/python3.7 или /usr/bin/python3.11) и приоритет для этой группы.

# update-alternatives --install /usr/bin/python python /usr/local/bin/python3.7 1
# update-alternatives --install /usr/bin/python python /usr/bin/python3.11 2

А с помощью следующей команды мы можем выбирать версию Python 3 в интерактивном режиме:

# update-alternatives --config python
Есть 2 варианта для альтернативы python (предоставляет /usr/bin/python).

  Выбор   Путь                  Приор Состояние
------------------------------------------------------------
* 0            /usr/bin/python3.11        2         автоматический режим
  1            /usr/bin/python3.11        2         ручной режим
  2            /usr/local/bin/python3.7   1         ручной режим

Нажмите «enter», чтобы не менять текущий выбор[*], или введите нужное число:

Либо можем использовать не интерактивный режим:

# update-alternatives --list python
/usr/bin/python3.11
/usr/local/bin/python3.7

# update-alternatives --set python /usr/bin/python3.11
# python --version
Python 3.11.2

# update-alternatives --set python /usr/local/bin/python3.7
# python --version
Python 3.7.16

Сводка
Установка разных версий Python 3 на Linux
Имя статьи
Установка разных версий Python 3 на Linux
Описание
В этой статье я покажу как можно установить несколько разных версий Python 3 на Linux, на примере дистрибутива Debian 12

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *