Compilar e instalar o Python 3.7

Por vezes podemos encontrar-nos com um sistema antigo que, por alguma razão, não podemos mudar. Sendo velho neste sistema não podemos instalar a partir do pacote Python 3.7, para evitar este problema devemos compilar e instalar o Python 3.7.

Unidades

Por exemplo, se tivermos um sistema CentOS 7, devemos instalar as seguintes dependências:

yum install gcc openssl-devel bzip2-devel libffi-devel zlib-devel

Por outro lado, se utilizarmos Ubuntu ou Debian, as dependências seriam as seguintes:

apt install build-essential libssl-dev libcrypto++-dev  libbz2-dev libffi-dev zlib1g zlib1g-dev

Descarregar código fonte

Após a instalação das dependências, devemos descarregar o pacote de código fonte da versão Python a ser compilada:

wget https://www.python.org/ftp/python/3.7.9/Python-3.7.9.tgz

Compilação do código fonte

Depois de descarregar o pacote, descomprima o pacote e vá para o directório:

tar xzf Python-3.7.9.tgz
cd Python-3.7.9

Uma vez dentro do directório, compilamos a versão:

./configure --enable-optimizations

Quando a compilação for concluída com sucesso, precisamos de instalar os binários gerados. Ao fazê-lo com “altinstall” instalamos um Python secundário sem sobrescrever uma versão existente do Python:

make altinstall

Mais um passo é instalar pip para poder instalar mais pacotes, para isso executaremos o seguinte:

wget https://bootstrap.pypa.io/get-pip.py
python3.7 get-pip.py

É também uma boa ideia instalar uma versão do virtualenv, um pacote para gerar ambientes virtuais:

pip3.7 install virtualenv

Finalmente, para manter os binários padrão das outras versões Python:

mv /usr/local/bin/pip /usr/local/bin/pip.new
mv /usr/local/bin/virtualenv /usr/local/bin/virtualenv-3.7

Para resumir tudo isto num script, deixo-o abaixo:

#/bin/bash
wget https://www.python.org/ftp/python/3.7.9/Python-3.7.9.tgz
tar xzf Python-3.7.9.tgz
cd Python-3.7.9
./configure --enable-optimizations
make altinstall
wget https://bootstrap.pypa.io/get-pip.py
python3.7 get-pip.py
pip3.7 install virtualenv
mv /usr/local/bin/pip /usr/local/bin/pip.new
mv /usr/local/bin/virtualenv /usr/local/bin/virtualenv-3.7

Deixe uma resposta