Con tutto il parlare che ho fatto in questo blog di Python non ho mai accennato all’esistenza dei PEP, ritenendo che i dilettanti cui rivolgo i miei scritti potessero fare a meno di queste complicazioni.
Ho invece incoraggiato i miei lettori che avessero bisogno di arricchire l’installazione di Python di base con pacchetti aggiuntivi ad utilizzare l’installatore pip, che, dalla versione 3.4 di Python faceva parte della dotazione di default.
Oggi le distro Linux con preinstallato Python3 che adottano la PEP identificata dal numero 668 non preinstallano più pip e non consentono più di usare questo installatore e, purtroppo, ormai molte distro, tra cui le popolari Ubuntu e derivate, compreso Mint e MX, fanno questo.
PEP sta per Python Enhancement Proposal ed è un documento di progettazione destinato alla comunità di sviluppatori Python riguardante nuove funzionalità del linguaggio, i suoi processi o il suo ambiente.
La PEP 668 riguarda i conflitti che possono insorgere tra i gestori di pacchetti del sistema operativo (nelle derivate da Debian, come Ubuntu, apt) e gli strumenti di gestione dei pacchetti specifici di Python (come pip) e, per evitare l’insorgere di questi conflitti, dichiara EXTERNALLY-MANAGED le installazioni che possono essere gestite con mezzi esterni a Python, come il gestore di pacchetti del sistema operativo, consentendone l’installazione solo con il gestore dei pacchetti e rendendo inutilizzabile l’installatore pip (salvo complicazioni come la creazione di un ambiente virtuale).
Fortunatamente le distro che hanno adottato la PEP 668 hanno nel proprio repository quasi tutti i pacchetti di cui ho parlato in questo blog (da numpy a scipy, da sympy a pandas, da matplotlib a sklearn).
Vorrà dire che, per installare, per esempio, scipy non possiamo più fare
pip install scipy
ma, se lavoriamo con una distro che ha adottato la PEP 668, come Ubuntu e le sue derivate, dobbiamo fare
apt install python3-scipy.
Purtroppo vi sono però pacchetti che si trovano nel repository di Python ma non in quello della distro e, se vogliamo evitare, da dilettanti, le complicazioni di Conda e Anaconda, abbiamo proprio bisogno di usare pip.
A questo punto, se non abbiamo disponbile pip lo installiamo con il comando a terminale
apt install python3-pip
ed eludiamo la PEP 668 con il comando
sudo rm -rf /usr/lib/python3.xx/EXTERNALLY-MANAGED
Da qui in poi, sapendo che per i pacchetti che troviamo nel repository della distro è meglio che usiamo l’installatore della distro, per gli altri possiamo usare pip.