Created: 2021-05-27 14:25 Updated: 2021-07-05 10:53

Introdução

Este artigo contém as informações necessárias para instalar a versão 3.x do Python no Debian Linux Buster (10.x) à partir do código fonte.

Esta instalação não irá remover a versão do Python instalada no sistema, mas permitirá o uso de uma versão mais atual da linguagem e do interpretador. Optei por não substituir a versão original do sistema porque muitas aplicações e ferramentas do sistema no Debian dependem do Python e a versão da distribuição possui muitos módulos específicos.

Instalando os pré-requisitos

Instale os seguintes pacotes necessários para a compilação do Python3:

sudo apt install build-essential libbz2-dev \
    libsqlite3-dev libreadline-dev \
    zlib1g-dev libncurses5-dev libssl-dev libgdbm-dev \
    libsqlite3-dev dpkg-dev libncursesw5-dev \
    libssl-dev libgdbm-dev libc6-dev libsqlite3-dev \
    tk-dev cmake libbz2-dev libreadline-dev wget \
    curl llvm xz-utils

Descompacte, configure, compile e instale o Python (estou assumindo que o arquivo do código fonte do Python já tenha sido baixado do site http://www.python.org)::

tar xJvf Python-3.9.2.tar.xz
cd Python-3.9.2
./configure --prefix=/opt/python-3.9.2 --enable-optimizations
make
sudo make install

O último comando irá instalar a nova versão do Python em /opt/python-3.9.2.

Atualize o cache de bibliotecas do sistema operacional. Para fazer isto, crie o arquivo /etc/ld.so.conf.d/01-python-3.9.2.conf e adicione o seguinte conteúdo:

/opt/python-3.9.2/lib

Grave o arquivo e atualize o cache das bibliotecas:

sudo ldconfig

Atualize as ferramentas pip e setuptools:

cd /opt/python-3.9.2/bin
sudo ./pip3 install --upgrade pip
sudo ./pip install --upgrade setuptools

Instale o Cython (biblioteca para uso de código em C/C++ junto com Python):

sudo ./pip3 install cython

Ajustando a variável de ambiente PATH

Adicione a nova versão do Python no PATH de seu usuário: edite o arquivo ~/.bashrc e altera a variável PATH. Veja o exemplo:

export PATH=/home/mario/bin:/opt/python-3.9.2/bin:/opt/Qt5.12.1/Tools/QtCreator/bin/:$PATH

Qt5

Para que o Qt, é preciso instalar as biblioteca no sistema operacional.

Instale as dependências:

sudo apt install libpoppler-qt5-1  libqt5concurrent5 \
    libqt5core5a  libqt5dbus5  libqt5designer5  libqt5gui5 \
    libqt5help5 libqt5network5 libqt5opengl5 \
    libqt5opengl5-dev libqt5printsupport5 \
    libqt5qml5 libqt5quick5 libqt5script5 libqt5sql5 \
    libqt5sql5-sqlite libqt5svg5 libqt5test5 libqt5webkit5 \
    libqt5widgets5 libqt5xml5 libqt5xmlpatterns5 \
    libqt5xmlpatterns5-dev  python-pyqt5 \
    python-pyqt5.qtsvg python-pyqt5.qtwebkit \
    qt5-qmake qtbase5-dev libqt5xmlpatterns5-dev

Instale o módulo de suporte ao Qt5 no Python:

cd /opt/python-3.9.2/bin
sudo ./pip3 install PyQt5

PySide6

A biblioteca PySide2 está disponível no repositório PyPI, o que torna a instalação quase que trivial (desde que as dependências descritas anteriormente esteja instaladas)::

cd /opt/python-3.9.2/bin
sudo ./pip3 install PySide6

Pacotes opcionais (minha seleção)

Eu costumo utilizar algumas ferramentas desenvolvidas em Python, tanto ferramentas disponíveis na Internet como de minha própria autoria e que precisam de alguns módulos específicos. Então, até para manter uma lista destes módulos e aplicações, segue a lista que eu costumo instalar após a instalação do Python. No entanto, alguns destes módulos possuem dependências que precisam ser instaladas antes:

Módulo Biblioteca Comando para instalação
lxml libxml2-dev, libxslt1-dev sudo aptitude install libxml2-dev libxslt1-dev
cryptography libffi-dev sudo aptitude install libffi-dev
GeoIP libgeoip-dev, libgeoip-bin sudo aptitude install libgeoip-dev libgeoip-bin

Para facilitar a vida, podemos criar um arquivo texto contendo todos os módulos e aplicações que desejamos instalar, com um item por linha, conforme a lista a seguir:

alabaster
beautifulsoup4
chardet
cloud-sptheme
cryptography
dnspython3
flake8
Flask
httplib2
imapclient
lxml
matplotlib
netaddr
nose
numpy
oauth2client
oauthlib
paho-mqtt
pandas
paramiko
pdfrw
pep8
psutil
psycopg2
psycopg2-binary
pydbus
pydialog
pygame
PyInstaller
pymongo
pyPdf
pypyodbc
pyserial
python-dateutil
pythondialog
python-magic
pyusb
requests
requests-oauthlib
rsa
scapy
scikit-learn
scipy
shodan
Slowloris
Sphinx
sphinx-bootstrap-theme
sphinxcontrib-disqus
sphinx-intl
sphinxjp.themecore
sphinxjp.themes.htmlslide
sphinxjp.themes.tinkerpress
sphinx-rtd-theme
sqlalchemy
sslscan
Tinkerer
tornado
virustotal2
websockets
Werkzeug
wheel
xlrd

Criado o arquivo, basta solicitar so pip que instale todos os módulos. Por exemplo, supondo que o arquivo com os nomes dos módulos e aplicações seja o arquivo /tmp/requirements.txt, o comando a seguir instalará todos os módulos contidos no arquivo:

cd /opt/python-3.9.2/bin
sudo ./pip3 install -r /tmp/requirements.txt

Um detalhe importante: a instalação a partir de arquivo é muito prática, porém deve-se ficar atento para possíveis erros. Nestes casos, observe as mensagens na tela e corrija os problemas.

PyGame

O pacote PyGame é necessário para uso com Kivy. Normalmente eu instalo diretamente do código fonte, mas nesta versão de Python precisei apenas instalar algumas dependências e depois instalar o PyGame e o Kivy diretamente do PIP.

Eis as dependências:

sudo apt install fonts-freefont-ttf \
     libfreetype6 libjpeg62-turbo libpng16-16 \
     libportmidi0 libsdl-image1.2 libsdl-mixer1.2 \
     libsdl-ttf2.0-0 libsdl1.2debian libflac-dev \
     libmad0-dev libmikmod-config libmikmod-dev \
     libsdl-image1.2-dev libsdl-mixer1.2-dev \
     libsdl-ttf2.0-dev libwebp-dev

A instalação via PIP ocorreu assim:

sudo ./pip3 install pygame

Da mesma forma para o Kivy:

sudo ./pip3 install kivy[base] kivy_examples --pre --extra-index-url https://kivy.org/downloads/simple/

Para testar, execute o seguinte código::

from kivy.app import App
from kivy.uix.button import Button

class TestApp(App):
    def build(self):
        return Button(text='Hello World')

TestApp().run()

Conclusão

Instalar o Python a partir do código-fonte não é uma tarefa difícil, mas trabalhosa. A compilação, caso sejam habilitados os testes, pode demorar bastante dependendo dos recursos computacionais disponíveis. No entanto, esta á uma opção para podermos testar e usar as últimas versões do Python.