Quando si vuole installare una libreria Python il primo strumento che viene in mente di utilizzare è probabilmente pip. Si tratta di una soluzione da linea di comando che non presenta particolari difficoltà dal punto di vista della sintassi. Il package manager, considerato uno standard, fa riferimento al repository PyPI (Python Package Index) che attualmente occupa oltre 460 mila progetti. Esso verifica la presenza di una libreria, la scarica e la installa tramite il comando pip install
. Ad esempio:
pip install numpy
Fin qui tutto bene, se non fosse per il fatto che pip
presenta un importante difetto, se così lo vogliamo chiamare. Non gestisce infatti le sempre possibili incompatibilità tra le librerie.
L'errore "externally managed environment"
Per questo motivo nasce l'errore externally managed environment
. Implementato nelle release più recenti di distribuzioni come Fedora e Ubuntu proprio per scongiurare eventuali conflitti tra i package manager dei sistemi operativi e strumenti come pip
.
Tali conflitti possono essere evitati utilizzando venv
, un modulo che ha il compito di creare degli ambienti virtuali nei quali i package possano essere installati isolatamente. Ad ogni ambiente corrisponde un set di librerie indipendente, il che impedisce il verificarsi di incompatibilità. In sostanza venv
fa in modo che le librerie Python integrate nel sistema tramite pip
non vengano installate a livello globale, cioè direttamente nell'ambiente principale del linguaggio. Una volta creato un ambiente virtuale deve esser attivato, viene così linkato all'interprete Python e gli script al suo interno diventano eseguibili.
venv
rappresenta una buona soluzione per la gestione dei conflitti, qui lo vediamo alla prova con l'installazione della libreria Shell GPT, ma il suo utilizzo non è particolarmente intuitivo. Ecco perché introdurremo ora pipx, un'alternativa che svolge lo stesso compito ma con una sintassi molto più simile a quella di pip
e con più automatismi rispetto a venv
.
Cos'è pipx
pipx
è uno strumento utilizzabile da linea di comando per il linguaggio Python che permette di installare e gestire in modo isolato i package del linguaggio. Fino a qui niente di nuovo, è funzionalmente simile a pip
e per alcuni aspetti a venv
, unendone in parte le caratteristiche. Presenta però il vantaggio di focalizzarsi sull'installazione di pacchetti che possono essere eseguiti attraverso script tra loro indipendenti.
pipx
garantisce che le dipendenze dei pacchetti non entrino in conflitto con altri package o con il sistema ospitante. Consente quindi di installare più versioni di uno stesso pacchetto senza incompatibilità o interferenze. Dispone inoltre di un'interfaccia più intuitiva per l'esecuzione di pacchetti installati, permettendo di lanciare script direttamente dal terminale. Senza che l'utilizzatore debba attivare manualmente gli ambiente virtuali.
pipx
può quindi rappresentare un valido sostituto di pip
, anche se è bene precisare che non si tratta di due soluzioni completamente intercambiabili. pip
infatti viene utilizzato soprattutto per gestire pacchetti Python che fungono da librerie all'interno di progetti. pipx
è stato invece progettato nello specifico per la gestione di pacchetti eseguibili, mettendo a disposizione un'installazione isolata che semplifica l'esecuzione degli script.
Installazione di pipx
Esistono diversi modi di installare pipx
. Su macOS per esempio, è possibile utilizzare brew, mentre su Windows e Linux si può far ricorso a pip
. Su Linux Mint e distribuzioni simili possiamo usare la seguente istruzione:
python3 -m pip install --user pipx
Se tutto dovesse andare nel migliore dei modi l'output del comando dovrebbe essere simile a quello raffigurato nell'immagine proposta di seguito:
Fatto questo pipx
non sarà pronto all'uso in quanto la sua installazione deve essere aggiunta al $PATH
, la variabile che archivia i percorsi alle directory dove devono essere ricercati gli eseguibili necessari al funzionamento dei comandi. Digitiamo quindi la seguente istruzione e premiamo Invio:
python3 -m pipx ensurepath
Nel caso in cui, infine, si voglia aggiornare la propria versione di pipx
basterà lanciare il comando:
python3 -m pip install --user --upgrade pipx
Come utilizzare pipx
pipx
può essere utilizzato per installare package, aggiornare pacchetti o rimuoverli dal sistema. Ognuna di queste operazioni prevede una sintassi differente.
Installare package con pipx
L'installazione di un nuovo package con pipx
avviene tramite il comando pipx install
seguito dal nome del pacchetto, riprendendo quasi fedelmente la sintassi già prevista per pip
. Un esempio di pacchetto installato con pipx
potrebbe essere httpie
. Quest'ultimo è uno strumento da linea di comando pensato per semplificare l'interazione con API e servizi Web tramite richieste HTTP. Per installarlo con pipx
l'istruzione da utilizzare è:
pipx install httpie
Chiaramente è sempre possibile utilizzare il medesimo comando per installare una versione specifica di un package. A questo scopo basta specificare il numero di rilascio della release desiderata. Come nell'esempio seguente, dove ad essere installata è la versione "21.7b0" di black
, uno strumento di formattazione del codice Python secondo le convenzioni di stile predefinite per il linguaggio:
pipx install black==21.7b0
Aggiornare package con pipx
pipx
consente di aggiornare un package già installato nel sistema per disporre della versione più recente. A questo scopo abbiamo a disposizione il comando pipx upgrade
seguito dal nome del package da aggiornare. Quindi, se volessimo installare l'ultima release del package black
"21.7b0" descritta in precedenza, il nostro comando dovrebbe essere il seguente:
pipx upgrade black
Come è possibile notare dall'immagine proposta di seguito, grazie a questa istruzione è stato possibile aggiornare black
dalla versione "21.7b0" alla "23.3.0". L'ultima disponibile al momento corrente.
È infine possibile aggiornare tutti i package installati con un unico comando:
pipx upgrade-all
Disinstallare package con pipx
Esattamente come pipx
permette di installare package, consente anche di disinstallarli. La sintassi richiesta per questa operazione è praticamente identica a quella dei comandi analizzati fino ad ora, con l'unica differenza che l'opzione utilizzata è uninstall
. Quest'ultima deve essere poi seguita dal nome del pacchetto da rimuovere. Se ad esempio volessimo disinstallare il package httpie
installato in precedenza, il nostro comando dovrebbe essere:
pipx uninstall httpie
Per controllare quali package sono presenti nel sistema è sempre possibile generarne l'elenco completo tramite il comando pipx list
.
Conclusioni
Con le dovute differenze, pipx
può essere considerata una valida alternativa a pip
se si desidera installare package Python in ambienti isolati che non devono essere gestiti manualmente. Tale caratteristica permette di integrare nuovi pacchetti nel linguaggio evitando di generare conflitti.