Le prossime versioni di Debian/Ubuntu probabilmente non lo consentiranno più pip install
al di fuori di un ambiente virtuale o Python separato installa a causa di conflitti tra pip e il gestore pacchetti del sistema operativo. Può ancora essere forzato, ma è fortemente sconsigliato.
Il software fornito con una distribuzione Linux può essere (abbastanza facilmente, potrei aggiungere) rotto installando pacchetti usando pip. Tutto ciò che l’utente deve fare è installare un pacchetto (o alcune delle sue dipendenze) più recente e retrocompatibile con una versione installata dai repository ufficiali della distribuzione Linux. E non si tratta nemmeno di violare alcune applicazioni, poiché Python è così ampiamente utilizzato al giorno d’oggi, gli utenti possono facilmente violare i pacchetti di distribuzione critici.
La rottura può verificarsi per entrambe le installazioni pip a livello di sistema (sudo pip install
), così come le installazioni utente (pip install --user
), ma soprattutto quest’ultimo, poiché il tentativo di ripristino da questo potrebbe comportare la rimozione (utilizzando pip, non il gestore pacchetti distro) dei pacchetti installati utilizzando il gestore pacchetti della distribuzione Linux.
Per questo motivo, le prossime versioni di Debian (Debian 12 Bookworm) e Ubuntu (Ubuntu 23.04 Lunar Lobster) adotteranno probabilmente PEP668 (PEP = Python Enhancement Proposal), contrassegnando gli ambienti di base Python come “gestiti esternamente” e non consentendo più pip regolari utilizzo dell’installazione sia per l’utente che per le installazioni di sistema. Questo può ancora essere forzato e, ovviamente, ci sono alternative.
La modifica è già attiva in Debian Testing e Ubuntu 23.04 Lunar Lobster (che avrà una versione beta il 30 marzo, con la versione finale prevista per il 20 aprile). C’è anche una proposta per includerlo in Fedora 38 (che ha avuto una versione beta oggi), ma per ora non è arrivato in Fedora 38.
Ho detto “probabile adozione” perché, anche se questa modifica è già presente in Debian Testing e Ubuntu 23.04 Lunar Lobster, Stefano Rivera, uno dei manutentori di Debian/Ubuntu Python, ha affermato che “se necessario, possiamo eseguire il rollback di EXTERNALLY-MANAGED nel nostro python3.11 per il rilascio di bookworm, ma mi piacerebbe farlo accadere…“.
Quindi quali sono le alternative all’utilizzo pip install
direttamente? Dai un’occhiata qui sotto:
1. Se possibile, prova a installare l’applicazione Python o il modulo della libreria dai repository Debian/Ubuntu.
2. Per le applicazioni Python che non sono disponibili nei repository Debian/Ubuntu (o per le quali si desidera installare una versione più recente), è possibile utilizzare pipx per installarle. Questo imposta un ambiente isolato e vi installa l’applicazione e le sue dipendenze.
Ad esempio, invece di eseguire:
pip install --user some-python-app
Puoi usare:
pipx install some-python-app
3. Per i moduli della libreria Python che non sono disponibili in Debian (o per i quali si desidera installare una versione più recente), è possibile utilizzare virtualenv (pacchetto chiamato virtualenv su Debian/Ubuntu) / venv (pacchetto chiamato python3-venv su Debian/Ubuntu) , che crea un ambiente isolato in cui è possibile installare applicazioni e librerie Python.
Ad esempio, invece di eseguire:
pip install --user some-python-module-or-app #or
pip install --user -r requirements.txt
Puoi usare:
python3 -m venv .venv/some-python-module-or-app
source .venv/some-python-module-or-app/bin/activate
python3 -m pip install some-python-module-or-app #or
python3 -m pip install -r requirements.txt
Se necessario, l’ambiente isolato può anche avere accesso ai moduli Python di sistema, con l’estensione --system-site-packages
bandiera.
4. Installa il tuo Python (dal sorgente) ad es /usr/local
.
Come ho detto sopra, se ne hai davvero bisogno, puoi forzare l’installazione dei pacchetti Python usando pip, ma fallo a tuo rischio e pericolo! Puoi forzare l’installazione dei pacchetti usando pip passando il file --break-system-packages
opzione per pip, esportazione PIP_BREAK_SYSTEM_PACKAGES=1
o aggiungendo quanto segue a ~/.config/pip/pip.conf
O /etc/pip.conf
file:
[global]
break-system-packages = true