Установка 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.