Come usare i pacchetti Python

I pacchetti Python consentono di suddividere i sistemi di grandi dimensioni e organizzare i loro moduli in modo coerente che tu e altre persone possano utilizzare e riutilizzare in modo efficiente. Il motto di Python "Batterie incluse" significa che viene precaricato con molti pacchetti utili nella libreria standard. 

Ma ci sono anche molti fantastici pacchetti di terze parti che puoi sfruttare. In questo tutorial imparerai tutto ciò che devi sapere su quali pacchetti sono esattamente, come importare i moduli dai pacchetti, esplorare il pacchetto integrato nella libreria standard di Python e installare pacchetti di terze parti.

Cosa sono i pacchetti?

Prima di parlare dei pacchetti, parliamo dei moduli. I moduli sono i file sorgente con estensione * .py dove tu (e tutti gli altri) inserisci le funzioni e le classi che compongono il tuo programma. I pacchetti sono la manifestazione del concetto di spazi dei nomi gerarchici di Python. Per citare lo Zen di Python: 

"Gli spazi dei nomi sono una delle grandi idee - facciamo di più!"

Per visualizzare l'intero Zen di Python, digitare importa questo in una sessione interattiva Python:

importa questo Lo Zen di Python, di Tim Peters Beautiful è meglio che brutto. L'esplicito è meglio che implicito. Semplice è meglio che complesso. Il complesso è meglio che complicato. Flat è meglio di nidificato. Sparse è meglio che denso. Conta la leggibilità I casi speciali non sono abbastanza speciali da infrangere le regole. Anche se la praticità batte la purezza. Gli errori non dovrebbero mai passare in silenzio. Salvo esplicitamente tacere. Di fronte all'ambiguità, rifiuta la tentazione di indovinare. Ci dovrebbe essere uno - e preferibilmente solo un modo - ovvio per farlo. Anche se in quel modo potrebbe non essere ovvio all'inizio, a meno che tu non sia olandese. Ora è meglio che mai. Anche se non è mai spesso meglio di * giusto * ora. Se l'implementazione è difficile da spiegare, è una cattiva idea. Se l'implementazione è facile da spiegare, potrebbe essere una buona idea. Gli spazi dei nomi sono una delle grandi idee - facciamo di più!

I namespace aiutano nell'organizzazione del codice e nella prevenzione dei conflitti di denominazione. Questo è fondamentale quando più persone lavorano insieme o quando usano pacchetti sviluppati da altre persone.

Mentre i pacchetti rappresentano una gerarchia di sotto-pacchetti e moduli, che sono file, la gerarchia non deve essere basata su un sistema di file in cui pacchetti e sotto-pacchetti sono directory e sottodirectory. È molto più flessibile di così.

Pacchetto di esempio

Diamo un'occhiata a un pacchetto chiamato "ansible". Non è un pacchetto dalla libreria standard. Vedrai in seguito come trovare e installare pacchetti di terze parti. Ora, vediamo solo la struttura del file di directory. 

I pacchetti verranno installati tipicamente nella directory dei pacchetti del sito dell'interprete Python, che sarà posizionata da qualche parte (a seconda della versione, del sistema operativo e della distribuzione) sotto "lib". Su Mac, per Python 2.7 si troverà in "/lib/python2.7/site-packages ". Ecco come è organizzato il pacchetto" ansible ":

albero ansible -L 1 ansible ├── __init__.py ├── cli ├── compat ├── config ├── constants.py ├── errori ├── esecutore ├── galassia ├── inventario ├── modulo_utili ├── moduli ├── parsing ├── playbook ├── plugin ├── modello ├── utils └── vars 15 directory, 2 file 

Ci sono due moduli e 15 directory. Ogni directory è un pacchetto secondario del pacchetto ansible principale. Guardando all'interno della directory ansible / utils, possiamo vedere che contiene moduli aggiuntivi e anche un altro sottoprogetto:

albero ansible / utils -L 1 ansible / utils ├── __init__.py ├── boolean.py ├── cmd_functions.py ├── color.py ├── debug.py ├── display.py ├── encrypt .py ├── hashing.py ├── listify.py ├── module_docs.py ├── module_docs_fragments ├── path.py ├── shlex.py ├── unicode.py └── vars.py 1 directory , 14 file

Il percorso di ricerca

Quando si importa un modulo, Python passerà attraverso un algoritmo di ricerca basato sul percorso di ricerca, che è un elenco di directory per avviare la ricerca. Il percorso di ricerca è un elenco di directory disponibili attraverso sys.path, e puoi manipolarlo in modo dinamico (aggiungi, rimuovi o sposta oggetti nel percorso di ricerca). La directory dei pacchetti del sito è sempre lì.

Per importare il modulo path.py da ansible / utils, devi usare il seguente comando:

importare ansible.utils.path

Se si desidera utilizzare anche il modulo os.oath standard, si utilizzerà il seguente comando:

import os.path

Ora è possibile utilizzare uno o entrambi i moduli del percorso senza conflitti a causa della differenza di spazio dei nomi a cui appartengono.

Esplorando la libreria standard

La libreria standard ha molti pacchetti. Vale la pena esplorarlo ogni volta che è necessario svolgere qualche compito e non si è sicuri di come. È molto probabile che per qualsiasi attività generica come matematica, integrazione della shell, integrazione del sistema operativo, manipolazione delle stringhe, networking e formati di file comuni, vi è un pacchetto ben progettato, ben performante e ben collaudato nella libreria standard. 

Puoi davvero fidarti dei pacchetti di librerie standard perché è un grosso problema entrare nella libreria standard. O il pacchetto è stato progettato dagli sviluppatori principali di Python o è stato pesantemente rivisto e spesso pesantemente utilizzato nel campo come libreria di terze parti prima di inserirlo nella libreria standard.

Ecco tutti i pacchetti nella libreria standard organizzati per argomento.

PyPI

La libreria standard è fantastica, ma spesso ci sono alcune funzionalità speciali che non sono standard. Ciò non significa che devi scriverlo da zero. Python ha una comunità vivace e attiva che sviluppa e condivide liberamente un sacco di codice. Inserisci PyPI - l'indice del pacchetto Python. PyPI ospita tutti i pacchetti disponibili pubblicamente e fornisce un punto di riferimento per la navigazione.

Navigazione in PyPI

PyPI organizza i pacchetti in un indice navigabile. È possibile sfogliare e cercare per argomento, ambiente, framework, sviluppo, stato, pubblico previsto, licenza, linguaggio naturale, linguaggio di programmazione (sì, esistono pacchetti Python che supportano molti linguaggi di programmazione) e sistema operativo. 

C'è anche una distinzione tra i pacchetti Python 2 e Python 3, e puoi vedere quanto è popolare un pacchetto per il numero di download recenti. Ad esempio, il pacchetto ansible è disponibile su PyPI, ed ecco i suoi metadati:

Download (Tutte le versioni): 5528 download nell'ultimo giorno 72037 download nella scorsa settimana 289967 download nel mese scorso Autore: Ansible, Inc. Home Page: http://ansible.com/ Bug Tracker: http: // github. com / ansible / ansible / Licenza: GPLv3 Categorie Stato di sviluppo :: 5 - Produzione / Ambiente stabile :: Console Destinatari Destinatari :: Sviluppatori Destinatari: Information Technology Destinatari :: Licenza System Administrators :: Approvazione OSI :: GNU General Public Licenza v3 o successiva (GPLv3 +) Natural Language :: Sistema operativo inglese :: Linguaggio di programmazione POSIX :: Python :: 2.6 Linguaggio di programmazione :: Python :: 2.7 Argomento :: Sistema :: Installazione / Setup Argomento :: Sistema :: Amministrazione sistemi Argomento :: Utilities Package Index Proprietario: James.Laska, jimi, ansible Package Index Maintainer: mpdehaan, badger Record DOAP: ansible-2.0.0.2.xml 

Installazione dei pacchetti

Esistono due modi per installare pacchetti da PyPI. È possibile scaricare il pacchetto e quindi eseguire installazione python setup.py. Ma il modo moderno è usare pip, setuptools e wheel. Pip è l'acronimo di Pip Installs Packages (sì, è uno di quegli acronimi) ed è il tuo front end per l'installazione. Se hai Python 2> = 2.7.9 o Python 3> = 3.4 installato da python.org, avrai già pip e setuptools, ma dovrai eseguire l'aggiornamento alla versione più recente: pip install -U pip setuptools o python -m pip install -U pip setuptools Su Windows.

Usa pip per installare la ruota: pip installare ruota.

Se stai usando una versione precedente di Python, considera l'aggiornamento. Se non ci riesci, dovrai installare pip, setuptools e wheel da soli. Controlla le istruzioni.

I pacchetti Python sono sempre installati in un ambiente. Una pratica comune che non tratterò qui è quella di utilizzare ambienti virtuali per gestire più installazioni indipendenti di Python con diversi interpreti e / o diversi set di pacchetti installati.

Migliori pratiche

L'autorità di packaging di Python fornisce molte indicazioni sulle migliori pratiche relative al packaging. Questo è importante perché è un'area di sviluppo attivo e le raccomandazioni si evolvono rapidamente.

Inoltre, se vuoi fare qualcosa di speciale come installare pacchetti da repository alternativi invece di PyPI o usare pip in un modo più sofisticato, troverai grandi discussioni e consigli pratici. 

Conclusione

Quando sei un principiante Python, impari il linguaggio di base e divertiti a giocarci. Presto scoprirai la libreria standard e man mano che acquisirai più esperienza, potrai beneficiare sempre più della sua ricchezza. 

Il prossimo passo nella tua evoluzione come Pythonista è incorporare la vasta meraviglia che la comunità Python ha messo su PyPI nei tuoi sistemi. I pacchetti come unità di implementazione del codice Python riutilizzabile abilitano questo ecosistema.