Можно ли собрать Python 2.7.16 с помощью openssl 1.1.1?

Можно ли собрать Python 2.7.16 с помощью openssl 1.1.1?

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

Это на Raspberry Pi, небольшой образ без графического интерфейса на основе Raspbian Jessie. Я планирую полную пересборку на основе текущего дистрибутива позже, когда позволит время, а пока я хочу просто вручную обновить важные пакеты.

Я клонировал исходный код OpenSSL из git, извлек ветку 1.1.1-stable и собрал ее; только default configure, make, make testи sudo make install.

Теперь я пытаюсь пересобрать Python для использования этой версии.

Мне удалось заставить его работать с Python 3, но с Python 2 он не работает. Оба файла — это tar-архивы, загруженные сегодня с сайта www.python.org/downloads/source/, собранные с дополнительными опциями ./configureи без них.make

Результат для 3.7.3: make выполнен успешно, как и этот тест

$ ./python -c "import ssl; print(ssl.OPENSSL_VERSION)"
OpenSSL 1.1.1d-dev  xx XXX xxxx

Старая (установленная) версия Python сообщает об OpenSSL 1.0.1t для python, а также для python3, поэтому новая сборка использует новую версию.

Результат для 2.7.16: make выполняется лишь частично, но завершается с ошибкой

Failed to build these modules:
_hashlib           _ssl               

и тот же тест проходит

$ ./python -c "import ssl; print(ssl.OPENSSL_VERSION)"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/local/src/python/Python-2.7.16/Lib/ssl.py", line 98, in <module>
    import _ssl             # if we can't import it, let the error propagate
ImportError: No module named _ssl

Сделайте вывод при сборке этих модулей:

building '_ssl' extension
gcc -pthread -fPIC -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I. -IInclude -I./Include -I/usr/include/arm-linux-gnueabihf -I/usr/local/include -I/usr/local/src/python/Python-2.7.16/Include -I/usr/local/src/python/Python-2.7.16 -c /usr/local/src/python/Python-2.7.16/Modules/_ssl.c -o build/temp.linux-armv7l-2.7/usr/local/src/python/Python-2.7.16/Modules/_ssl.o
gcc -pthread -shared build/temp.linux-armv7l-2.7/usr/local/src/python/Python-2.7.16/Modules/_ssl.o -L/usr/lib/arm-linux-gnueabihf -L/usr/local/lib -lssl -lcrypto -o build/lib.linux-armv7l-2.7/_ssl.so
*** WARNING: renaming "_ssl" since importing it failed: build/lib.linux-armv7l-2.7/_ssl.so: undefined symbol: OPENSSL_sk_num
building '_hashlib' extension
gcc -pthread -fPIC -fno-strict-aliasing -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I. -IInclude -I./Include -I/usr/include/arm-linux-gnueabihf -I/usr/local/include -I/usr/local/src/python/Python-2.7.16/Include -I/usr/local/src/python/Python-2.7.16 -c /usr/local/src/python/Python-2.7.16/Modules/_hashopenssl.c -o build/temp.linux-armv7l-2.7/usr/local/src/python/Python-2.7.16/Modules/_hashopenssl.o
gcc -pthread -shared build/temp.linux-armv7l-2.7/usr/local/src/python/Python-2.7.16/Modules/_hashopenssl.o -L/usr/lib/arm-linux-gnueabihf -L/usr/local/lib -lssl -lcrypto -o build/lib.linux-armv7l-2.7/_hashlib.so
*** WARNING: renaming "_hashlib" since importing it failed: build/lib.linux-armv7l-2.7/_hashlib.so: undefined symbol: OPENSSL_init_crypto

решение1

Как и в моем комментарии к вопросу, ответ — да.

[Изменить: сначала я подумал, что это мой CFLAGS, но нет.]

Наконец-то получил. Команда сборки для модуля _ssl содержит следующие ключи: -L/usr/lib/arm-linux-gnueabihf -L/usr/local/lib

Первое из этих двух мест все еще содержало СТАРУЮ (1.0.0) версию libssl.so. Правильная версия была во втором пути.

Самое смешное, что это, похоже, не имело никакого значения при сборке версии 3.7.3, только для версии 2.7.16.

Связанный контент