Вопрос или проблема
У меня следующая структура директорий:
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/5937337/installing-python-with-ssl-support-in-local
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 и других желаемых библиотек. Убедитесь в том, что следуете всем рекомендациям и проверяете вывод ошибок после каждой стадии. Если у вас возникнут проблемы с тестированием, стоит проверить установленные зависимости и настройки конфигурации.
Если у вас есть дополнительные вопросы или трудности, не стесняйтесь обращаться за помощью. Удачи в сборке!