En un artÃculo anterior ya explicamos como compilar Python en un directorio local, esto resulta muy útil en sistemas desactualizados en los que resulta imposible instalar nada pero si el sistema es extremadamente antiguo dará problemas incluso cuando conecte con servidores externos por SSL ya que el cifrado del cliente y el servidor no serán compatibles, esto implica que no podremos instalar nada desde Pip.
Para solventar esto compilaremos de forma externa OpenSSL y luego Python incluyendo las librerÃas de criptográficas que hemos compilado manualmente, de este modo tendremos un entorno completo de Python actualizado.
Si estamos en un sistema Ubuntu instalaremos las dependencias necesarias para compilar Python.
NOTA: En caso de tratarse de Gentoo o FreeBSD ya viene todo instalado.
Clonamos el repositorio de OpenSSL y compilamos las fuentes:
mv openssl opensslRepo
cd opensslRepo
./config --prefix=$HOME/openssl --openssldir=$HOME/openssl
make -j8
make install
Bajamos el código de la versión de Python que deseemos y desenpaquetamos el fichero:
wget https://www.python.org/ftp/python/3.9.0/Python-3.9.0.tgz
tar -xvf Python-3.9.0.tgz
cd Python-3.9.0
Editamos el fichero Setup donde editaremos el parámetro SSL y descomentaremos el resto de lÃneas mostradas:
SSL=/root/openssl
_ssl _ssl.c \
    -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
    -L$(SSL)/lib -lssl -lcrypto
Dependiendo del sistema operativo que estemos utilizando incluiremos las librerias OpenSSL en el proceso de compilación de un modo u otro.
ldconfig -m /root/openssl/lib
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$HOME/openssl/lib
Compilamos las fuentes:
make -j8
make install
Comprobamos la versión de Python:
Python 3.9.0
Comprobamos la versión OpenSSL con la que Python fué compilado:
OpenSSL 3.0.0-alpha8-devÂ
Mediante pip podremos instalar las librerÃas que deseemos:
Es importante recalcar que debemos incluir nuestras librerÃas OpenSSL en cada ejecución de nuestro Python, de lo contrario no encontrará las librerÃas con las que fué compilado:
/root/Python-3.6.9/Python/bin/python3: error while loading shared libraries: libssl.so.3: cannot open shared object file: No such file or directory
ldconfig -m /root/openssl/lib
Python/bin/python3 SCRIPT_NAME
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$HOME/openssl/lib
Python/bin/python3 SCRIPT_NAME
Si la ejecución es manual podemos incluir las librerÃas como se ha indicado, en caso de querer ejecutarlo de forma desasistida, por ejemplo desde un Cron, la mejor opción es crear un script en Bash que haga los dos pasos, incluir las librerÃas y ejecutar el script en Python.