Это связано с Debian 9
использованием OpenSSL 1.1.0
. Однако поддержка OpenSSL 1.1.0
в модуле SSL была добавлена только в Python 2.7.13
, 3.5.3
и 3.6+
Таким образом, это делает Python в этих версиях неправильно связанным с библиотекой ssl
. Вопросы https://github.com/pyenv/pyenv/issues/945
Поэтому вы должны вручную добавить эти библиотеки при компиляции.
Мое предложение
Поскольку ваша система уже скомпилирована с python по умолчанию, непреднамеренно скомпилированная другая версия python в исполняемый файл global
может вызвать много скрытых проблем, особенно некоторые команды, используемые в python по умолчанию для системы.
Так почему бы вам не использовать pyenv
, чтобы контролировать эти версии питонов? pyenv
подобен программам контроля версий Python, он использует shims
, через процесс, называемый rehashing, pyenv
поддерживает shims
в этом каталоге, чтобы соответствовать каждой команде Python для каждой установленной версии python
, pip
, и так далее.
Для получения дополнительной документации, пожалуйста, прочитайте: https://github.com/pyenv/pyenv.
Для установки pyenv
, пожалуйста, следуйте предоставленной ссылке.
Решение
После многих часов борьбы я, наконец, нашел решение, позволяющее идеально решить эти версии проблем с конфликтами питонов, скопировать и вставить следующий скрипт в новый файл и сделать его исполняемым, после чего вы сможете скомпилировать и установить эти питоны. Хотя если вы хотите установить их другим способом, скажем, без использования pyenv
, измените команды последней второй строки в соответствии с вашими потребностями.
#!/bin/bash -e
# Note: it is a script to solve Ubuntu 18.04 LTS
# different version of pythons compiling
# header confliction problems
#
# The idea is got from @JustAnotherArivist
# From URL: https://github.com/pyenv/pyenv/issues/945
#
# The script used in here is with slightly modifications
# to fit many different SSL header versions
# First under your home directory make OpenSSL library
# and extract useful package
mkdir ~/libssl1.0-dev
cd ~/libssl1.0-dev
apt-get download libssl1.0-dev
ar x libssl1.0-dev* data.tar.xz
tar -xf data.tar.xz --strip-components=2
# Second, specifically get your current system's SSL headers
# and make symbolic-links
libcrypto=$(ls /usr/lib/x86_64-linux-gnu/ | grep libcrypto.so......)
libssl=$(ls /usr/lib/x86_64-linux-gnu/ | grep libssl.so......)
ln -s /usr/lib/x86_64-linux-gnu/${libcrypto} ~/libssl1.0-dev/lib/x86_64-linux-gnu
ln -s /usr/lib/x86_64-linux-gnu/${libssl} ~/libssl1.0-dev/lib/x86_64-linux-gnu
# Set your CFLAGS LDFLAGS compile options
# And use pyenv install the python version <3.4.5 or <3.5.3
# Note: it is a one line command
# Please change the version of python that you want to compile
CFLAGS="-I${HOME}/libssl1.0-dev/include -I${HOME}/libssl1.0-dev/include/x86_64-linux-gnu" \
LDFLAGS="-L${HOME}/libssl1.0-dev/lib/x86_64-linux-gnu" \
pyenv install 3.4.2
# Remove tempor libssl1.0-dev direcotory
rm -rf ~/libssl1.0-dev