Come gestire progetti Python con Pipenv

L'ecosistema di pacchetti di Python ti consente di sfruttare il lavoro di milioni di altri sviluppatori con un semplice pip installcomando. Gli ambienti virtuali di Python ti consentono di isolare i progetti ei relativi pacchetti l'uno per l'altro.

Ma destreggiarsi tra ambienti e pacchetti separatamente può essere ingombrante. Soprattutto se i tuoi progetti hanno requisiti di pacchetto specifici e vuoi concentrarti sullo sviluppo invece che sulla manutenzione. Ciò di cui abbiamo bisogno è un modo per gestire insieme ambienti e pacchetti. 

Pipenv integra la gestione degli ambienti virtuali Python e dei pacchetti Python in un unico strumento. Pipenv garantisce che ogni progetto utilizzi la versione corretta di ogni pacchetto di cui ha bisogno e che ciascuno di quei pacchetti abbia anche le dipendenze corrette.

Inoltre, Pipenv genera un elenco delle dipendenze del progetto che possono viaggiare con esso, consentendo ad altri utenti o sviluppatori di impostare lo stesso progetto allo stesso modo. Anche altri utenti dovranno installare Pipenv per impostare correttamente un progetto gestito da Pipenv, ma fortunatamente installare e utilizzare Pipenv è un gioco da ragazzi. 

Come funziona Pipenv

In genere, quando crei un progetto Python e utilizzi un ambiente virtuale per i suoi pacchetti, hai il compito di creare tu stesso l'ambiente virtuale (usando il comando  py -m venv), installare le dipendenze al suo interno e tenere traccia delle dipendenze manualmente.

Pipenv fornisce un modo per fare tutto questo in modo semi-automatico. L'ambiente virtuale per il tuo progetto viene creato e gestito per te quando installi i pacchetti tramite l'interfaccia della riga di comando di Pipenv. Le dipendenze vengono rilevate e bloccate ed è possibile gestire separatamente le dipendenze di sviluppo e runtime. Puoi anche migrare da file esistenti della vecchia scuola requirements.txt, quindi non è necessario distruggere il tuo progetto e ricominciare da capo per utilizzare Pipenv bene.

Nota che a differenza di altri strumenti di gestione dei progetti Python (come Poetry), Pipenv non gestisce lo "scaffolding" del tuo progetto. Cioè, Pipenv non crea la struttura interna della directory del progetto con test fittizi, stub di documentazione, ecc., Ma si concentra principalmente sulla gestione dei pacchetti e dell'ambiente. Ciò rende Pipenv una buona scelta se si desidera solo uno strumento per concentrarsi su ambienti e pacchetti virtuali e non su una soluzione all-in-one.

Inizia con Pipenv

Pipenv installa nello stesso modo come la maggior parte qualsiasi altro pacchetto Python: pip install --user pipenv. L' --useropzione è consigliata per evitare che Pipenv sia in conflitto con altri pacchetti a livello di sistema. È inoltre necessario aggiungere il percorso alla directory binaria di base utente al percorso di sistema, in modo che i comandi Pipenv vengano instradati nel posto giusto.

Se prevedi di rendere Pipenv una parte coerente del tuo flusso di lavoro, è anche una buona idea mantenere l'installazione di Python sottostante il più minima possibile. Questo consiglio vale per la maggior parte delle installazioni Python che fanno uso di ambienti virtuali.

Crea un nuovo progetto con Pipenv

Per iniziare un progetto completamente nuovo con Pipenv, basta creare una directory e popolarla con i file che normalmente creeresti per un progetto. Se tendi a impalcare un progetto mentre procedi, puoi iniziare con una directory vuota.

L'installazione di pacchetti per un progetto non è notevolmente diversa con Pipenv che con Pip; infatti, la sintassi è più o meno la stessa. Apri una console nella directory del progetto e digita pipenv install per installare un pacchetto per il progetto. Per specificare che il pacchetto è per lo sviluppo , utilizzare il -dflag. È possibile utilizzare la pip sintassi per indicare una versione specifica di un pacchetto (ad esempio black==13.0b1).

Quando installi un pacchetto con Pipenv, accadono due cose. Innanzitutto, Pipenv controllerà se è già stato creato un ambiente virtuale per questa directory del progetto. In caso affermativo, Pipenv installerà il pacchetto nell'ambiente virtuale esistente. In caso negativo, Pipenv creerà un ambiente virtuale che utilizza la stessa edizione di Python usata per eseguire Pipenv. Notare che l'ambiente virtuale non viene creato nella directory del progetto stessa; viene creato in una directory gestita da Pipenv nel tuo profilo utente.

In secondo luogo, Pipenv installerà i pacchetti richiesti nell'ambiente virtuale. Al termine dell'installazione, Pipenv riporterà tutto ciò che ha fatto, incluso un percorso per l'ambiente virtuale se dovesse crearne uno.

In genere non è necessario conoscere il percorso per l'ambiente virtuale creato da Pipenv. Per attivare l'ambiente, è sufficiente accedere alla directory del progetto e utilizzare  pipenv shellper avviare una nuova sessione di shell o utilizzare  pipenv run per eseguire direttamente un comando. Ad esempio, utilizzare  pipenv run mypyper eseguire la versione dello strumento da riga di comando di mypy(supponendo che lo mypystrumento sia stato installato nell'ambiente virtuale) o pipenv run python -m per eseguire un modulo Python disponibile nell'ambiente virtuale.

Pipenv e file di blocco

Dai un'occhiata all'interno della directory dopo aver installato i pacchetti con Pipenv e vedrai due file Pipfilee Pipfile.lock. Entrambi sono generati automaticamente da Pipenv e non devono essere modificati direttamente, poiché descrivono lo stato dei pacchetti nel progetto.

Pipfileè il più semplice dei due. Elenca solo i pacchetti necessari per il progetto, da dove sono installati (l'impostazione predefinita è PyPI) e quale versione di Python è necessaria per eseguire tutto. Pipfile.lockè più complesso. Elenca ogni pacchetto insieme ai dettagli della versione e agli hash SHA-256 generati dal pacchetto. Gli hash vengono utilizzati per garantire che i pacchetti installati corrispondano esattamente a quanto specificato, non solo il numero di versione, ma anche i contenuti ottenuti.

Quando lavori su un progetto che utilizza Pipenv per la gestione dei pacchetti, ti consigliamo di aggiungere i file Pipfilee Pipfile.lockal repository di controllo della versione per il progetto. Qualsiasi modifica apportata ai pacchetti per il tuo progetto altererà a sua volta quei file, quindi tali modifiche dovrebbero essere tracciate e controllate.

Usa un progetto Pipenv

Se scarichi un repository di origine per un progetto che utilizza Pipenv per la gestione dei pacchetti, tutto ciò che devi fare è decomprimere il contenuto del repository in una directory ed eseguirlo pipenv install(non sono necessari nomi di pacchetto). Pipenv leggerà i file Pipfilee Pipfile.lockper il progetto, creerà l'ambiente virtuale e installerà tutte le dipendenze secondo necessità.

Infine, se desideri utilizzare Pipenv per gestire un progetto che attualmente utilizza un requirements.txtfile, vai alla directory del progetto ed esegui pipenv install. Pipenv rileverà il  requirements.txt(oppure puoi usare il -rflag per puntarlo) e migra tutti i requisiti in un file Pipfile.