Теперь, когда у нас есть Docker, зачем нам еще компилировать и устанавливать Python? Мы напрашиваемся на неприятности? Docker удобен, но если на самой машине установлена последняя версия Python, не будет ли он удобнее в качестве среды разработки?
Автор компилировал и устанавливал его не менее 10 раз, и каждый раз я все равно терял уйму времени из-за этой ошибки. Сегодня я подведу итог, чтобы помочь вам избежать ошибок в процессе компиляции и установки Python.
Перед компиляцией Python вам необходимо убедиться, что в вашей системе установлены все необходимые зависимости сборки. В системе на базе Debian, например Ubuntu, вы можете сделать это:
sudo apt update
sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev \
libnss3-dev libssl-dev libsqlite3-dev libreadline-dev libffi-dev libbz2-dev
Для систем на базе Red Hat, таких как CentOS или Fedora, вы можете сделать это:
sudo yum groupinstall "Development Tools"
sudo yum install zlib-devel bzip2-devel openssl-devel ncurses-devel \
sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel
Можно получить из Python официальный сайт или его GitHub Загрузите исходный код из зеркальной библиотеки. использовать wget
Команды, скачанные из официальных источников:
wget https://www.python.org/ftp/python/3.12.3/Python-3.12.3.tgz
Затем разархивируйте скачанный файл:
tar -xvzf Python-3.12.3.tgz
После распаковки переключитесь в исходный каталог:
cd Python-3.12.3
Перед компиляцией настройте параметры установки, вы можете использовать ./configure
сценарий. Можно указать такие параметры, как каталог установки (через --prefix
параметры) и оптимизация компиляции (в Python 3.12, пройдено --enable-optimizations
Включение оптимизации компиляции может значительно улучшить Python производительность, но удлинит процесс компиляции).
./configure --enable-optimizations --prefix=/usr/local/python3.12
Здесь мы устанавливаем Python в /usr/local/python3.12, а затем добавляем путь вручную, чтобы он не влиял на другие версии Python, такие как python2.
Существует множество других вариантов конфигурации, доступных при запуске ./configure --help
Приходите проверить их.
бегать make
команда для компиляции Python:
make -j 8 # '8' количество ядер, используемых при компиляции, настройте в соответствии с вашей системой
Поскольку время компиляции больше, мы можем использовать -j
Возможность распараллеливания компиляции для ускорения компиляции. Это число лучше всего соответствует количеству ядер вашего процессора.
На этом этапе мы обычно сталкиваемся с ошибками SSL:
Could not build the ssl module!
Python requires a OpenSSL 1.1.1 or newer
Openssl в операционной системе обычно ниже 1.1.1. В этом случае загрузите новую версию с официального сайта openssl, скомпилируйте и установите ее, а затем соберите соответствующие библиотеки в каталог lib пути установки. Но установка openssl обычно проходит не так гладко. Следуйте инструкциям ниже
mkdir ~/openssl
cd ~/openssl
wget https://www.openssl.org/source/openssl-3.3.0.tar.gz
tar -zxvf openssl-3.3.0.tar.gz
cd openssl-3.3.0
./config --prefix=/usr/local/ssl3.3 --openssldir=/usr/local/ssl3.3 shared zlib
make
make install
Если приведенные выше действия сообщают об ошибке на этапе настройки: «Невозможно найти IPC/Cmd.pm в @INC», вам необходимо установить следующие пакеты зависимостей:
sudo yum groupinstall 'Development Tools'
sudo yum install perl-core zlib-devel
Вышеуказанные шаги будут openssl установлен в /usr/local/ssl3.3 Далее мы можем выполнить его из командной строки (терминала) /usr/local/ssl3.3/bin/openss version
Если во время выполнения сообщается об ошибке, необходимо указать lib64 путь :
sudo vim sudo vim /etc/ld.so.conf.d/openssl.conf
# Добавить контент /usr/local/ssl3.3/lib64
sudo ldconfig
а затем выполнить /usr/local/ssl3.3/bin/openss version
Вы можете увидеть правильную информацию о версии.
Но перед компиляцией Python есть еще один ключевой шаг: создать файл lib в /usr/local/ssl3.3/, затем поместить в него соответствующий файл so и выполнить следующую команду:
cd ~/openssl/openssl-3.3.0 # Убедитесь, что вы находитесь в разархивированном каталоге.
mkdir /usr/local/ssl3.3/lib
cp ./*.{so,so.3*,a,pc} /usr/local/ssl3.3/lib
бегать make
команда для компиляции Python:
./configure --with-openssl=/usr/local/ssl3.3 --prefix=/usr/local/python3.12
make -j 8 # '8' количество ядер, используемых при компиляции, настройте в соответствии с вашей системой
На этот раз компиляция может быть успешно завершена.
один разкомпилировать Заканчивать,бегать Следующая команда начинается с Установить Python:
sudo make install
Нам не нужно использовать altinstall
Это потому, что мы указали собственный каталог установки. /usr/local/python3.12
。Если не указано Установить Оглавление,Во избежание замены системы по умолчанию Python версию, вы можете использовать altinstall
。
После завершения установки вы можете проверить только что установленную версию Python, вызвав:
/usr/local/bin/python3.12 --version
В выводе должен отображаться номер версии Python. После входа в Python выполните import ssl, чтобы проверить установку.
$ /usr/local/python3.12/bin/python3
Python 3.12.3 (main, May 23 2024, 15:08:26) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import ssl
>>> ssl.OPENSSL_VERSION
'OpenSSL 3.3.0 9 Apr 2024'
>>>
На этом установка завершена.
Справочная ссылка
https://stackoverflow.com/questions/53543477/building-python-3-7-1-ssl-module-failed