Сборка Python с поддержкой OpenSSL

Вопрос или проблема

У меня следующая структура директорий:

nchambers@nchambers-305E4A-305E5A-305E7A:~/mini-bin$ la
2to3               cpp-5.3.0            gcov-5.3.0           grmid-5.3.0         objcopy-2.25.1    python3.5-config      .sources
2to3-3.5           elfedit-2.25.1       gcov-tool-5.3.0      grmiregistry-5.3.0  objdump-2.25.1    python3.5m            strings-2.25.1
addr2line-2.25.1   g++-5.3.0            gfortran-5.3.0       gserialver-5.3.0    pydoc             python3.5m-config     strip-2.25.1
aot-compile-5.3.0  gappletviewer-5.3.0  gij-5.3.0            gtnameserv-5.3.0    pydoc3            python3-config        x86_64-unknown-linux-gnu-c++-5.3.0
ar-2.25.1          gc-analyze-5.3.0     gjar-5.3.0           idle                pydoc3.5          python-config         x86_64-unknown-linux-gnu-g++-5.3.0
.archives          gcc-5.3.0            gjarsigner-5.3.0     idle3               python            pyvenv                x86_64-unknown-linux-gnu-gcc-5.3.0
as-2.25.1          gcc-ar-5.3.0         gjavah-5.3.0         idle3.5             python2           pyvenv-3.5            x86_64-unknown-linux-gnu-gcc-ar-5.3.0
bash               gcc-nm-5.3.0         gkeytool-5.3.0       jcf-dump-5.3.0      python2.7         ranlib-2.25.1         x86_64-unknown-linux-gnu-gcc-nm-5.3.0
.binaries          gcc-ranlib-5.3.0     gnative2ascii-5.3.0  jv-convert-5.3.0    python2.7-config  readelf-2.25.1        x86_64-unknown-linux-gnu-gcc-ranlib-5.3.0
.build             gcj-5.3.0            gorbd-5.3.0          ld-2.25.1           python2-config    rebuild-gcj-db-5.3.0  x86_64-unknown-linux-gnu-gcj-5.3.0
c++-5.3.0          gcj-dbtool-5.3.0     gprof-2.25.1         ld.bfd-2.25.1       python3           size-2.25.1           x86_64-unknown-linux-gnu-gfortran-5.3.0
c++filt-2.25.1     gcjh-5.3.0           grmic-5.3.0          nm-2.25.1           python3.5         smtpd.py
nchambers@nchambers-305E4A-305E5A-305E7A:~/mini-bin$ la .sources/
bash-4.4-beta  binutils-2.25.1  boost_1_60_0  gcc-5.3.0  Python-2.7.11  Python-3.5.1
nchambers@nchambers-305E4A-305E5A-305E7A:~/mini-bin$ la .build/
bash-4.4-beta  binutils-2.25.1  boost_1_60_0  gcc-5.3.0  Python-2.7.11  Python-3.5.1
nchambers@nchambers-305E4A-305E5A-305E7A:~/mini-bin$ la .binaries/
bash-4.4-beta  binutils-2.25.1  boost_1_60_0  gcc-5.3.0  Python-2.7.11  Python-3.5.1
nchambers@nchambers-305E4A-305E5A-305E7A:~/mini-bin$ 

В общем, архивы tar помещаются в .archives, распакованные источники идут в .sources, сборка происходит в .build, а финальные бинарные файлы хранятся в .binaries. Затем я создаю символическую ссылку на бинарные файлы из .binaries в ~/mini-bin, который находится в моем $PATH. Я знаю, это странный рабочий процесс, но он работает для меня. В любом случае, я собираюсь собрать python-2.7.11 (и 3.4.0, но начинаю с 2.7.11) из исходников. Он отлично собирается на моей системе, но мне нужно, чтобы он собирался с поддержкой ncurses, readline, ssl и т. д. Должен ли я компилировать эти библиотеки из исходников? Если да, то куда мне положить библиотеки? Как мне сказать Python собирать с ними? Спасибо и хорошего дня!

Я пытался собрать 3.9.1 на Ubuntu 20.10.

Следуя указаниям по зависимостям здесь:

https://devguide.python.org/setup/#install-dependencies

в частности, я установил 3.9.0 из репозиториев, включил репозитории источников, а затем:

sudo apt-get build-dep python3.9

а затем, используя это для шага конфигурации:

LDFLAGS="-L/usr/lib/x86_64-linux-gnu" ./configure --enable-optimizations

означает, что я собираю Python без ошибок ssl, что об encouraging.

Без префикса LDFLAGS сборка выдала ошибки ssl.

Однако,

make test

все еще показывает сбои для ssl-тестов, хотя модуль импортируется.

Сосредоточившись только на ssl, ответов много:

https://serverfault.com/questions/353128/recompiling-python-with-ssl-support-on-ubuntu

https://mail.python.org/pipermail/python-ideas/2014-May/027866.html

https://stackoverflow.com/questions/22409092/coredump-when-compiling-python-with-a-custom-openssl-version

https://stackoverflow.com/questions/5937337/installing-python-with-ssl-support-in-local

https://stackoverflow.com/questions/18516956/how-to-compile-python-2-4-6-with-ssl-readline-and-zlib-on-debian-lenny

https://bugs.python.org/issue21541

И нет – определенно вам не нужны оригинальные исходники SSL, просто “apt-get install libssl-dev” будет достаточно.

Ответ или решение

Для сборки Python с поддержкой OpenSSL, ncurses и readline, следуя вашей рабочей структуре, вам нужно выполнить несколько шагов. Ниже представлен детальный процесс, включая установку зависимостей, конфигурацию и сборку.

Шаг 1: Установка зависимостей

Прежде чем начать сборку, убедитесь, что все необходимые библиотеки и их заголовочные файлы установлены. Используя пакетный менеджер Ubuntu, выполните команду:

sudo apt-get update
sudo apt-get install build-essential libssl-dev libreadline-dev libncurses5-dev libncursesw5-dev libbz2-dev libsqlite3-dev libffi-dev tk-dev zlib1g-dev

Эта команда установит все необходимые зависимости для сборки Python с поддержкой OpenSSL, readline и других библиотек.

Шаг 2: Скачивание и подготовка источников

Перейдите в директорию .sources и скачайте исходный код версии Python, которую вы хотите установить. Для Python 2.7.11 это может быть сделано следующим образом:

cd ~/mini-bin/.sources
wget https://www.python.org/ftp/python/2.7.11/Python-2.7.11.tgz
tar -xvzf Python-2.7.11.tgz

Шаг 3: Настройка конфигурации

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

cd Python-2.7.11
LDFLAGS="-L/usr/lib/x86_64-linux-gnu" ./configure --enable-optimizations --with-openssl=/usr/include/openssl

Здесь --with-openssl указывает на путь к библиотекам OpenSSL, если требуется специфическая версия или установка. Однако в большинстве случаев установка libssl-dev через apt будет достаточной.

Шаг 4: Сборка и установка

После успешной конфигурации используйте команду make для сборки Python:

make

И далее, выполните тестирование сборки:

make test

Шаг 5: Установка

Если тестирование прошло успешно, установите Python:

sudo make install

Шаг 6: Проверка установки SSL

Чтобы убедиться, что Python был собран с поддержкой OpenSSL, запустите следующую команду в интерактивном режиме Python:

python -c "import ssl; print(ssl.OPENSSL_VERSION)"

Если вы видите версию OpenSSL, это свидетельствует о том, что поддержка была добавлена успешно.

Заключение

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

Если у вас есть дополнительные вопросы или трудности, не стесняйтесь обращаться за помощью. Удачи в сборке!

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

Капча загружается...