Установка новейшей версии Python из исходного кода

cd /opt
wget https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tar.xz
tar xvf Python-3.7.1.tar.xz
mv Python-3.7.1 python3.7
cd python3.7
./configure --prefix=/opt/python3.7 --enable-optimizations  --with-zlib-dir=/usr/local/lib
make -j 4  # 4 -cpu kernel count
make install

Чтобы собрать с поддержкой openssl (zun and etc.)

## ставим библиотеки поддержки SSL
sudo apt install build-essential gcc make zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget
sudo apt-get install libreadline-gplv2-dev  libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev
# sudo apt install libncursesw5-dev

Если надо собрать с текущей версией openssl, то cразу можно собирать python (для zun pike)
сборка python из исходного кода (openssl 1.x)

rm /usr/bin/lsb_release
cd /opt/python3.8
./configure --prefix=/usr --with-openssl=/usr
## ключ --enable-optimizations НЕ обязательно - будет очень долго работать!
make -j4
sudo make install

Правим файл /opt/python3.8/Modules/Setup в районе 210-ой строки:

# Socket module helper for SSL support; you must comment out the other
# socket line above, and possibly edit the SSL variable:
#SSL=/usr/local/ssl
SSL=/usr/local
_ssl _ssl.c \
        -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
        -L$(SSL)/lib -lssl -lcrypto

Если не исправить Modules/Setup, то вот такая ошибка:

Could not build the ssl module!
Python requires an OpenSSL 1.0.2 or 1.1 compatible libssl with X509_VERIFY_PARAM_set1_host().
LibreSSL 2.6.4 and earlier do not provide the necessary APIs, https://github.com/libressl-portable/portable/issues/381

сборка openssl из исходного кода

если надо более новую версию openssl

cd /opt
git clone https://github.com/openssl/openssl.git
cd /opt/openssl
export LD_LIBRARY_PATH=/opt/openssl/lib
./Configure
make
make test
make install

сборка python из исходного кода (openssl 3.x)

rm /usr/bin/lsb_release
cd /opt/python3.7
./configure --prefix=/usr --with-openssl=/opt/openssl
## ключ --enable-optimizations НЕ обязательно - будет очень долго работать!
make -j4
sudo make install
после установки openssl надо дать команду:
ldconfig /usr/local/lib64/
Эта команда добавит путь /usr/local/lib64/ в линковщик, иначе будет ошибка:
libssl.so.3 not found
Можно еще сделать так:
echo "/usr/local/lib64" > /etc/ld.so.conf.d/openssl.conf

Подробнее на SO

поправляем pip, python default

ln -s /usr/bin/pip3.7 /usr/bin/pip
pip install --upgrade pip
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.7 1
update-alternatives --config python
python -V

Проверяем, что python собрался с поддержкой openssl

python -c "import ssl; print (ssl.OPENSSL_VERSION)"
OpenSSL 1.1.0l  10 Sep 2019

Установка pip для python3.7

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py

It is possible that pip does not get installed by default. One potential fix is: Возможно, pip не установится по умолчанию. Тогда ставим дополнительно:

python -m ensurepip --default-pip