Sommario
Esistono tre categorie generali di moduli con cui hai a che fare:
- Quei programmi di supporto installati per tutti gli utenti con il sistema di pacchetti del sistema operativo. (Ciò può anche includere strumenti e librerie utilizzate dalle persone che programmano in Python; vedere di seguito.) Per questi usi i pacchetti del sistema operativo dove puoi e
pip
installa nelle directory di sistema dove necessario.
- Quei programmi di supporto installati da un determinato utente solo per uso personale, e anche per alcuni aspetti del suo uso quotidiano di Python come linguaggio di scripting. Per questi usa
pip --user
, forse pyenv o pythonz , e strumenti e tattiche simili.
- Coloro che supportano lo sviluppo e l'uso di un'applicazione specifica. Per questi usi
virtualenv
(o uno strumento simile).
Ogni livello qui può anche ottenere supporto da un livello precedente. Ad esempio, il nostro utente in (2) potrebbe fare affidamento su un interprete Python installato tramite pacchetti del sistema operativo.
Andando in questo in un po 'più in dettaglio:
Programmi e pacchetti di sistema
I programmi scritti in Python che si desidera "eseguire" sono facili: basta usare gli strumenti di installazione del sistema operativo e lasciare che portino tutto ciò di cui hanno bisogno; questo non è diverso da un programma non Python. Questo probabilmente porterà strumenti / librerie Python (come lo stesso interprete Python!) Su cui gli utenti della tua macchina potrebbero iniziare a fare affidamento; questo non è un problema purché comprendano la dipendenza e, idealmente, conoscano mezzi alternativi per gestirlo su host che non forniscono tali dipendenze.
Un esempio comune e semplice di tale dipendenza sono alcuni dei miei script personali ~/.local/bin/
che iniziano con #!/usr/bin/env python
. Funzioneranno bene (purché funzionino con Python 2) su RH / CentOS 7 e la maggior parte (ma non tutte) le installazioni di Ubuntu; non verranno installati su un'installazione Debian di base o su Windows. Per quanto non mi piaccia il mio ambiente personale che ha molto in termini di dipendenze dai pacchetti di sistemi operativi (lavoro su un numero di sistemi operativi diversi), qualcosa del genere trovo abbastanza accettabile; il mio piano di backup sui rari host che non dispongono di un sistema Python e non riescono a ottenerlo è di utilizzare un sistema utente come descritto di seguito.
Anche le persone che usano un interprete Python di sistema dipendono solitamente dal sistema pip3
. Ecco dove di solito traccio la linea sulle dipendenze del mio sistema; tutto da virtualenv
avanti mi occupo di me stesso. (Ad esempio, il mio script di attivazione standard si basa su qualunque cosa si trovi pip3
o pip
si trovi nel percorso, ma scarica la propria copia di virtualenv
bootstrap dell'ambiente virtuale che sta creando.
Detto questo, ci sono probabilmente circostanze in cui è perfettamente ragionevole rendere più disponibile un ambiente di sviluppo. Potresti avere interfacce Python in pacchetti complessi (come un DBMS) in cui vuoi usare la versione di sistema di quello e pensi che sia meglio lasciare che il sistema scelga anche il particolare codice della libreria Python che userai per parlarci. Oppure potresti distribuire molti host con un ambiente di sviluppo di base per una classe Python e trovare l'automazione più semplice con i pacchetti di sistema standard.
Programmi e pacchetti "giornalieri" dell'utente
Gli utenti possono avere librerie o programmi Python che non si adattano bene in un ambiente virtuale perché vogliono innanzitutto aiutare a creare ambienti virtuali (ad esempio, virtualenvwrapper ) o sono cose che usi comunemente dalla riga di comando anche mentre facendo un lavoro non Python. Anche se hanno la capacità di installare versioni di sistema di questi, potrebbero sentirsi più a loro agio nell'installare le proprie (ad es. Perché vogliono usare l'ultima versione dello strumento e le sue dipendenze).
Generalmente pip --user
è ciò che le persone useranno per questo, anche se alcune dipendenze, come lo stesso interprete Python, richiedono un po 'di più. pyenv e pythonz sono utili per costruire interpreti personali (sia che siano installati ~/.local/bin
come interprete predefinito o meno), e ovviamente si può sempre semplicemente costruire "a mano" dalla fonte se le librerie di sviluppo sono disponibili.
Cerco di mantenere il minimo set di cose installato qui: virtualenvwrapper (perché lo uso costantemente) e forse l'ultima versione di pip. Cerco di evitare dipendenze al di fuori della libreria standard o su Python 3 per gli script personali che scrivo per essere utilizzati su molti host. (Anche se vedremo per quanto tempo riuscirò a resistere mentre sposterò sempre più questi script personali su Python.)
Sviluppo separato di applicazioni e ambienti di runtime
Questa è la solita cosa di virtualenv. Per lo sviluppo dovresti quasi sempre usare un virtualenv per assicurarti di non usare dipendenze di sistema, o spesso più di uno per testare su diverse versioni di Python.
Questi ambienti virtuali sono utili anche per le applicazioni con molte dipendenze in cui si desidera evitare di inquinare l'ambiente dell'utente. Ad esempio, di solito installo un virtualenv per l'esecuzione di notebook Jupyter e simili.