Python — это многофункциональный язык программирования, который подходит для решения самых разных задач, от создания веб-сайтов до анализа данных. Он популярен среди разработчиков благодаря своей простоте и универсальности.
В этой статье мы расскажем, как установить Python на ваш Linux-дистрибутив.
Мы рассмотрим три варианта установки Python:
- С помощью пакетного менеджера — самый простой и распространенный метод установки Python. В большинстве дистрибутивов Linux уже есть пакеты Python в их репозиториях.
- Из исходных кодов — этот способ предоставляет больше гибкости, но может оказаться сложнее.
- С помощью пакетного менеджера для Python (pyenv) — самый удобный способ, требующий дополнительных настроек.
Проверка версий Python
Обычно на большинстве дистрибутивов Линукс Python 3 версии уже установлен, как стандартная опция. Мы можем проверить его версию при помощи следующей команды, открыв терминал.
python3 --version
Однако на устаревших версиях дистрибутивов может быть установлен Python 2-й версии, для него используем команду
python --version
Установка Python через пакетный менеджер
Перед установкой необходимо обновить системные пакеты и репозитории и тут рассмотрим для разных версий свои способы
Debian / Ubuntu
sudo apt update && sudo apt upgrade -y
RHEL (Fedora / Almalinux / RockyOS / CentOS)
sudo yum update -y
Для дистрибутивов Ubuntu нам легко расширить список доступных версий, добавив репозиторий deadsnakes:
sudo add-apt-repository ppa:deadsnakes/ppa
Для дистрибутивов на основе Red Hat (Fedora / Almalinux / RockyOS / CentOS) легко добавить репозиторий EPEL (Extra Packages for Enterprise Linux):
sudo yum install epel-release -y
Далее нам нужно проверить, какие версии Python доступны для установки:
Debian / Ubuntu
sudo apt search python | grep ^python
RHEL (Fedora / Almalinux / RockyOS / CentOS)
sudo yum list available | grep ^python
Что бы ограничиться нужной нам версией необходимо ввести команду по примеру (ищем доступна ли нам версия python 3.8, так как 12 версия у нас уже установлена)
Debian / Ubuntu
sudo apt-cache search python | grep -E ^python3?\.8
RHEL (Fedora / Almalinux / RockyOS / CentOS)
sudo yum list available | grep -E ^python3?\.8
Если в списке есть нужная нам версия, то установить ее можно с помощью команды
Debian / Ubuntu
sudo apt install python3.8
RHEL (Fedora / Almalinux / RockyOS / CentOS)
sudo yum install python3.8 -y
Тут важный момент, а именно нужно ли указывать минорную версию через точку (python3.10) или без (python310), зависит от того, как называется пакет версии. Это можно узнать из результата выполнения предыдущих команд, которую мы использовали для проверки доступный версий для установки.
Чтобы обратиться к установленной версии интерпретатора нужно указать его номер и версию в команде:
python3.8 --version
Компиляция Python из исходного кода
Компиляция версии Python из исходного кода требуется установка дополнительных зависимостей. Выполняем установку следующими командами:
Debian / Ubuntu
sudo apt-get install -y make curl build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python-openssl
RHEL (Fedora / Almalinux / RockyOS / CentOS)
sudo yum -y install epel-release
sudo yum -y groupinstall «Инструменты разработки»
sudo yum -y install curl gcc make zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel xz xz-devel libffi-devel tk-devel
Для удобства дальнейшей работы по установке Python в переменных командной оболочки, давайте зададим номер версии в виде переменной
Проверить список доступных версий Python можно на офф.сайте https://www.python.org/downloads/source/
Нужно скачать и распаковать архив с исходным кодом, а после нужно перейти в распакованную директорию, а для того, чтобы упростить нам задачу воспользуемся можем воспользоваться сервисом Build, compile and install Python from source code https://www.build-python-from-source.com/
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev liblzma-dev tk-dev
cd /tmp/
wget https://www.python.org/ftp/python/3.9.20/Python-3.9.20.tgz
tar xzf Python-3.9.20.tgz
cd Python-3.9.20
Теперь указываем конфигурацию для сборки и запускаем компиляцию
sudo ./configure --prefix=/opt/python/3.9.20/ --enable-optimizations --with-lto --with-computed-gotos --with-system-ffi --enable-shared
sudo make -j "$(nproc)"
sudo ./python3.9 -m test -j "$(nproc)"
sudo make altinstall
sudo rm /tmp/Python-3.9.20.tgz
В зависимости от наших потребностей в использовании Python можете добавить следующие опции к команде ./configure, которую мы использовали выше. Сейчас приведем примеры того, что можем добавить:
--prefix=/path/to/directory - Указывает каталог установки.
--enable-optimizations - Включает оптимизацию для Python.
--enable-ipv6 - Включает поддержку сетей IPv6.
--with-lto - Включает Link-Time Optimization (LTO), что улучшит производительность, но может увеличить время компиляции.
Чтобы узнать больше обо всех опциях, конфигурации, нужно выполнить команду
./configure --help
Далее можем добавить дополнительные инструменты для работы
sudo /opt/python/3.9.20/bin/python3.9 -m pip install --upgrade pip setuptools wheel
sudo ln -s /opt/python/3.9.20/bin/python3.9 /opt/python/3.9.20/bin/python3
sudo ln -s /opt/python/3.9.20/bin/python3.9 /opt/python/3.9.20/bin/python
sudo ln -s /opt/python/3.9.20/bin/pip3.9 /opt/python/3.9.20/bin/pip3
sudo ln -s /opt/python/3.9.20/bin/pip3.9 /opt/python/3.9.20/bin/pip
sudo ln -s /opt/python/3.9.20/bin/pydoc3.9 /opt/python/3.9.20/bin/pydoc
sudo ln -s /opt/python/3.9.20/bin/idle3.9 /opt/python/3.9.20/bin/idle
sudo ln -s /opt/python/3.9.20/bin/python3.9-config /opt/python/3.9.20/bin/python-config
После запуска этого кода у нас пройдет компиляция, которая займет некоторое время, а по результату мы должны будем оказаться в директории нашей установленной версии
Сейчас важный шаг, а именно необходимо проверить правильность установки Python. Для установленной нашей версии 3.9.20- проверяем следующей командой:
python3.9 --version
Если все работает корректно, то нужно удалить файлы исходного кода, из которых мы выполняли компиляцию, так как они нам больше не нужны:
rm -rf /tmp/Python-3.9.20 /tmp/Python-3.9.20.tar.gz
Бывают случаи, когда компиляция заканчивается с ошибками. Для этого нужно повторно выполнить установку, но на этот раз без оптимизации. Перед этим нужно выполнить очистку временных файлов, которые были созданы в процессе нашей прошлой компиляции:
sudo make clean; ./configure; sudo make -j «$(nproc)»; sudo make install
Установка Python через pyenv
Если способы выше нам не подходят, то рекомендуем попробовать pyenv, он крайне удобен, если необходимо работать над несколькими проектами, которые требуют разные версии интерпретатора. Этот менеджер версий позволяет легко переключаться между версиями и изолировать зависимости проекта.
Прежде чем установить pyenv, нужно установить зависимости, необходимые для компиляции Python, команды для их установки нам уже известны с этой статьи выше, но нужно добавить будет еще и пакет git, поскольку загружать pyenv будем из git-репозитория
Debian / Ubuntu
sudo apt install -y curl git-core gcc make zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev libssl-dev build-essential libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
RHEL (Fedora / Almalinux / RockyOS / CentOS)
sudo yum -y install epel-release
sudo yum -y groupinstall «Development Tools»
sudo yum -y install git curl gcc make zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel xz xz-devel libffi-devel tk-devel
Далее загружаем последнюю ветку исходного кода pyenv из репозитория на Github и устанавливаем его в путь ~/.pyenv :
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
Теперь нужно установить переменную окружения PYENV_ROOT, чтобы она указывала на путь, куда вы установили pyenv, и экспортировать его. Затем добавьте $PYENV_ROOT/bin в PATH, чтобы запустить утилиту командной строки pyenv как любую другую системную команду.
Вам также нужно включить shims и автозавершение, добавив pyenv init в командную строку, чтобы иметь возможность переключаться между версиями Python «на лету». Вы можете добавить все конфигурации с помощью следующей команды:
echo -e "\n## pyenv configs\nexport PYENV_ROOT=\"\$HOME/.pyenv\"\nexport PATH=\"\$PYENV_ROOT/bin:\$PATH\"\n\nif command -v pyenv 1>/dev/null 2>&1; then\n eval \"\$(pyenv init -)\"\nfi" >> ~/.bashrc
## pyenv configs
export PYENV_ROOT=«$HOME/.pyenv»
export PATH=«$PYENV_ROOT/bin:$PATH»
if command -v pyenv 1>/dev/null 2>&1; then
eval «$(pyenv init -)»
fi
После этого нужно применить изменения:
source ~/.bashrc
Теперь на уровне оболочки bash пользователя, с которого выполняли установку, у вас есть возможность использовать, устанавливать и изменять версии Python.
На этом этапе можно перейти непосредственно к установке нужной вам версии Python. Проверить список доступных для установки версий можно, выполнив следующую команду:
pyenv install -l
Установить версии Python можно по следующему примеру:
pyenv install 3.12.2
Затем проверяем, какие версии уже установлены:
pyenv versions
Теперь у нас есть возможность устанавливать версии Python для каждого проекта отдельно. Для этого нужно перейти в директорию нашего проекта:
cd /path/to/project/
Теперь на уровне командной оболочки нужно установить версию Python, которую мы предварительно установили через команду pyenv install :
pyenv local 3.10.3
Теперь нужно проверить, находясь в директории, корректно ли была установлена версия для нашего проекта или нет, при помощи команд pyenv version или python -V.
Вывод
Мы рассмотрели 3 разных способа установки версий Python на Linux. Самым удобным является метод установки через системный пакетный менеджер, ведь установка проходит в 2-3 команды, однако когда на сервере могут размещаться различные приложения с различными версиями - лучше выбрать установку через Pyenv. Этот способ рекомендует и сообщество Python, так как любую версию можно установить одной командой и сразу же начать ее использовать.
В Zomro вы можете выбрать сервер для любых потребностей и любых приложений.