Created: 2021-05-27 14:25 | Updated: 2023-07-19 13:57 |
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.
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 \
libffi-dev zlib1g-dev zlibc libssl-dev liblzma-dev
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 --enable-shared
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
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
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 libxcb-cursor0
Instale o módulo de suporte ao Qt5 no Python:
cd /opt/python-3.9.2/bin
sudo ./pip3 install PyQt5
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
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 |
Quando uso um editor para programação em Python, mais especificamente para o VSCode ou Codium, eu costumo instalar também os seguintes pacotes:
pip install black
pip install pylint
pip install pyright
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.
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()
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.