Установка Python 3.10 на CentOS 7/8

Посмотреть текущую версию

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

# python --version

Python 2.7.5

Или в системе может быть уже установлена альтернативная версия Python:

# python3 --version

Python 3.6.8

Узнать расположение пакета Python и его библиотек можно так:

# whereis python

python: /usr/bin/python /usr/bin/python2.7 /usr/bin/python2.7-config /usr/lib/python2.7 /usr/lib64/python2.7 /usr/include/python2.7 /usr/share/man/man1/python.1.gz

Установка из пакетов

Это самый просто и быстрый способ установки. Но на момент написания инструкции в репозитории epel доступн Python 3.6.

0. Подключаем репозиторий Epel:

# sudo yum install epel-release

1. Устанавливаем альтернативную версию с инструментами разработки и менеджером пакетов

# sudo yum install python3 python3-devel python3-pip

Менеджер попробует найти нужный пакет, если найдет, то выведет информацию и спросит про установку - вводим «y» и нажимаем ентер.

2. Проверяем установку. Данная версия будет доступна по алиасу:

# python3 -V

Python 3.6.3

3. Можно заменить стандартную версию, изменив символьную ссылку python с /usr/bin/python2 на /usr/bin/python3. Но перестанут работать некоторые пакеты, использующие Python (например, yum).

Установка из исходника

0.1. Устанавливаем из репозитория пакеты, необходимые для сборки пакетов:

# sudo yum install make gcc

Проверяем:

# gcc --version

gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)

Copyright (C) 2015 Free Software Foundation, Inc.

Это свободно распространяемое программное обеспечение. Условия копирования

приведены в исходных текстах. Без гарантии каких-либо качеств, включая

коммерческую ценность и применимость для каких-либо целей.

Устанавливаем инструменты необходимые для работы Python:

# sudo yum install openssl-devel libffi-devel bzip2-devel

0.2. Проверяем версию OpenSSL:

# openssl version

OpenSSL 1.0.2k-fips  26 Jan 2017

Обратите внимание, что для версий Python старше 3.7 требуется версия OpenSSL не ниже 1.1.1. Если вам требуется последняя версия Python и ваша версия ниже, то установите новую версию OpenSSL.

0.3. Проверяем версию SQLite:

# sqlite3 -version

3.38.2 2022-03-26 13:51:10 d33c709cc0af66bc5b6dc6216eba9f1f0b40960b9ae83694c986fbf4c1d6f08f

Для свежих релизов Django требуется версия SQLite не ниже 3.9.0, если вы собираетесь использовать данную СУБД и ваша версия ниже, то произведите обновление SQLite.

1. Для работы менеджера пакетов Python (Pip) и модулей требуется библиотека OpenSSL. Ищем ее:

# openssl version -d

OPENSSLDIR: "/etc/pki/tls"

2. Переходим на официальный сайт https://www.python.org/downloads/, находим нужную версию, переходим на страницу этой версии и внизу страницы копируем ссылку на архив «Gzipped source tarball».

3. Переходим в какую то временную папку и скачиваем архив на CentOS:

# wget https://www.python.org/ftp/python/3.10.4/Python-3.10.4.tgz

4. Распаковываем архив

# tar -xvf Python-3.10.0.tgz

5. Переходим в папку с исходником:

# cd Python-3.10.4/

6. Конфигурируем пакет с подключением OpenSSL и SQLite:

# sudo ./configure --enable-optimizations --with-openssl=/etc/pki/tlsl

Появится большой список проверок:

checking build system type... x86_64-pc-linux-gnu

checking host system type... x86_64-pc-linux-gnu

checking for python3.10... python3.10

checking for --enable-universalsdk... no

checking for --with-universal-archs... no

checking MACHDEP... "linux"

checking for gcc... gcc

checking whether the C compiler works... yes

checking for C compiler default output file name... a.out

checking for suffix of executables...

checking for --with-static-libpython... yes

checking for --disable-test-modules... no

configure: creating ./config.status

config.status: creating Makefile.pre

config.status: creating Misc/python.pc

config.status: creating Misc/python-embed.pc

config.status: creating Misc/python-config.sh

config.status: creating Modules/ld_so_aix

config.status: creating pyconfig.h

config.status: pyconfig.h is unchanged

creating Modules/Setup.local

creating Makefile

7. Производим установку как дополнительную версию Python:

# sudo make altinstall

Опять появится большой список, в конце должны увидеть примерно следующее:

...

changing mode of /usr/local/bin/2to3-3.10 to 755

rm /usr/local/lib/python3.10/lib-dynload/_sysconfigdata__linux_x86_64-linux-gnu.py

rm -r /usr/local/lib/python3.10/lib-dynload/__pycache__

/usr/bin/install -c -m 644 ./Misc/python.man \

 /usr/local/share/man/man1/python3.10.1

if test "xupgrade" != "xno"  ; then \

 case upgrade in \

  upgrade) ensurepip="--altinstall --upgrade" ;; \

  install|*) ensurepip="--altinstall" ;; \

 esac; \

  ./python -E -m ensurepip \

  $ensurepip --root=/ ; \

fi

Looking in links: /tmp/tmpvgniqw9e

Processing /tmp/tmplsknwpp_/setuptools-57.4.0-py3-none-any.whl

Processing /tmp/tmplsknwpp_/pip-21.2.3-py3-none-any.whl

Installing collected packages: setuptools, pip

  WARNING: Value for scheme.headers does not match. Please report this to <https://github.com/pypa/pip/issues/10151>

  distutils: /usr/local/include/python3.10/setuptools

  sysconfig: /root/Python-3.10.0/Include/setuptools

  WARNING: Value for scheme.headers does not match. Please report this to <https://github.com/pypa/pip/issues/10151>

  distutils: /usr/local/include/python3.10/pip

  sysconfig: /root/Python-3.10.0/Include/pip

  WARNING: The script pip3.10 is installed in '/usr/local/bin' which is not on PATH.

  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.

Successfully installed pip-22.0.4 setuptools-57.4.0

WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv

Значит установка прошла успешно.

8. Проверяем установку. Сам Python:

# python3.10 --version

Python 3.10.4

Менеджер пакетов Pip тоже был успешно установлен, проверяем:

# pip3.10 --version

pip 22.0.4 from /usr/local/lib/python3.10/site-packages/pip (python 3.10)

Проверить версию SSL в Python:

# python3 -c "import ssl; print(ssl.OPENSSL_VERSION)"

OpenSSL 1.0.2k-fips  26 Jan 2017

Возможные ошибки при установке

Модуль не может быть установлен

Где-то посередине вывода при установке Python может появится сообщение о том? что не удалось включить в сборку какой-то модуль:

...

 

running install

running build

running build_ext

INFO: Can't locate Tcl/Tk libs and/or headers

 

Python build finished successfully!

The necessary bits to build these optional modules were not found:

_curses               _curses_panel         _hashlib          

_lzma                 _ssl                  _tkinter          

_uuid                 readline                                

To find the necessary bits, look in setup.py in detect_modules() for the module's name.

 

 

The following modules found by detect_modules() in setup.py, have been

built by the Makefile instead, as configured by the Setup files:

_abc                  pwd                   time              

 

 

Could not build the ssl module!

Python requires a OpenSSL 1.1.1 or newer

 

running build_scripts

copying and adjusting /root//Python-3.10.4/Tools/scripts/pydoc3 -> build/scripts-3.10

 

...

В данном случае это OpenSSL, требуется обновить его.

Или:

Following modules built successfully but were removed because they could not be imported: _sqlite3

В данном случае не корректная библиотека (не сам пакет) SQLite - по обновлению тут.

Ошибка SSL при использовании PIP

# pip3.10 install --upgrade pip3.10

Defaulting to user installation because normal site-packages is not writeable

WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.

Ошибка означает что в сборке используемой версии Python нет модуля OpenSSL, его или не включили при сборке (в последних версиях он отключен по умолчанию) или он не был включен из-за конфликта версии - установите новую версию OpenSSL.