Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Python
Code

Come scrivere, pacchettizzare e distribuire una libreria in Python

by
Difficulty:IntermediateLength:MediumLanguages:

Italian (Italiano) translation by Mirko Pizii (you can also view the original English article)

Python è un bel linguaggio di programmazione ma, la pacchettizzazione è uno dei suoi punti deboli. E' un fatto ben conosciuto nella community. L'installazione, l'importazione, l'uso e la creazione di pacchetti è migliorato molto nel corso degli anni ma, non è ancora alla pari con i nuovi linguaggi come Go e Rust che hanno imparato molto dalle lotte di Python e altri linguaggi maturi.

In questo tutorial, imparerai tutto ciò di cui hai bisogno di sapere per scrivere, pacchettizzare e distribuire i tuoi propri pacchetti.

Come scrivere una libreria Python

Una libreria Python è un insieme coerente di moduli Python che sono organizzati come un pacchetto Python. In generale, ciò significa che tutti i moduli vivono sotto la stessa cartella e che questa cartella è sul percorso di ricerca di Python.

Scriviamo rapidamente un piccolo pacchetto Python 3 e illustriamo tutti questi concetti.

Il pacchetto Pathology

Python 3 dispone di un eccellente oggetto Path, che è un miglioramento enorme sopra il modulo imbarazzante di os.path di Python 2. Ma non è presente una funzionalità fondamentale — trovare il percorso dello script corrente. Questo è molto importante quando si desidera individuare i file di accesso relativi allo script corrente.

In molti casi, lo script può essere installato in qualsiasi posizione, quindi non è possibile utilizzare percorsi assoluti, e la cartella di lavoro può essere impostata su qualsiasi valore, quindi non è possibile utilizzare un percorso relativo. Se si desidera accedere a un file in una directory sotto-cartella o in quella genitore, devi essere in grado di capire la cartella attuale dello script.

Ecco come farlo in Python:

Per accedere ad un file denominato 'file.txt' in una sotto-cartella 'dati' della cartella dello script corrente, puoi utilizzare il seguente codice: print(open(str(script_dir/'data/file.txt').read())

Con il pacchetto pathology, hai un metodo incorporato script_dir e puoi utilizzarlo così:

Sì, è un boccone. Il pacchetto pathology è molto semplice. Deriva la propria classe Path dal percorso di pathlib e aggiunge un script_dir() statico che restituisce sempre il percorso dello script chiamante.

Ecco l'implementazione:

A causa dell'implementazione di varie piattaforme di pathlib.Path, puoi derivare direttamente da esso e devi derivare da una specifica sottoclasse (PosixPath o WindowsPath). La risoluzione di script dir utilizza il modulo di ispezione per trovare il chiamante e quindi il relativo attributo filename.

Test del pacchetto Pathology

Ogni volta che scrivi qualcosa che è più di uno script usa e getta, dovresti testarlo. Il modulo pathology non c'è eccezione. Qui ci sono le prove utilizzando il framework standard unit test:

Il percorso di Python

I pacchetti Python devono essere installati da qualche parte nel percorso di ricerca di Python per essere importati come moduli Python. Il percorso di ricerca di Python è un elenco di cartelle ed è sempre disponibile in sys.path. Ecco il mio sys.path corrente:

Nota che la prima riga vuota dell'output rappresenta la cartella corrente, quindi è possibile importare i moduli dalla cartella corrente di lavoro, qualunque essa sia. Puoi direttamente aggiungere o rimuovere le cartelle da sys.path.

È inoltre possibile definire una variabile d'ambiente PYTHONPATH e ci sono alcuni altri modi per controllarlo. Lo standard site-packages è incluso già, e questo è dove vanno i pacchetti che si installano tramite pip.

Come pacchettizzare una libreria Python

Ora che abbiamo il nostro codice e test, pacchettizziamo tutto in una vera e propria libreria. Python fornisce un modo semplice tramite il modulo di installazione. Puoi creare un file chiamato setup.py nella cartella principale del tuo pacchetto. Poi, per creare una distribuzione del sorgente, puoi eseguire: python setup.py sdist

Per creare una distribuzione binaria chiamata wheel, puoi eseguire: python setup.py bdist_wheel

Ecco il file setup.py del pacchetto di pathology:

Esso comprende un sacco di metadati oltre la voce 'packages' che utilizza la funzione find_packages() importata da setuptools per trovare sotto-pacchetti.

Costruiamo una distribuzione del codice sorgente:

L'avviso è perché ho usato un file README.md non standard. È possibile ignorare. Il risultato è un file tar-gzip sotto la cartella dist:

Ed ecco una distribuzione binaria:

Il pacchetto pathology contiene solo moduli puri di Python, così un pacchetto universale può essere costruito. Se il pacchetto include estensioni di C, dovrete costruire un wheel separato per ogni piattaforma:

Per una più profonda immersione nel tema di pacchettizzazione di una libreria Python, scopri come scrivere i tuoi propri pacchetti Python.

Come distribuire un pacchetto Python

Python dispone di un repository di pacchetti centrale chiamato PyPI (Python Packages Index). Quando installi un pacchetto Python utilizzando pip, scaricherà il pacchetto da PyPI (a meno che non si specifichi un repository diverso). Per distribuire il nostro pacchetto di pathology, abbiamo bisogno di caricarlo su PyPI e fornire alcuni metadati aggiuntivi che richiede PyPI. I passaggi sono:

  • Creare un account su PyPI (solo una volta).
  • Registrare il tuo pacchetto.
  • Caricare il pacchetto.

Creare un Account

È possibile creare un account sul sito web PyPI. Poi creare un file .pypirc nella vostra cartella principale:

Per scopi di test, è possibile aggiungere un server di indice "pypitest" al file .pypirc:

Registrare il tuo pacchetto

Se questa è la prima release del pacchetto, è necessario registrarlo con PyPI. Utilizza il comando register di setup.py. Ti chiederà la password. Nota che io punto al repository di prova qui:

Caricare il proprio pacchetto

Ora che il pacchetto è registrato, possiamo caricarlo. raccomando di utilizzare twine che è più sicuro. Installalo come al solito usando pip install twine. Poi carica il pacchetto utilizzando twine e fornisci la tua password (redatta sotto):

Per una più profonda immersione nel tema di distribuzione di pacchetti, scopri come condividere i tuoi pacchetti Python.

Conclusione

In questo tutorial, siamo andati attraverso il processo di vera e propria scrittura di una libreria Python, pacchettizzazione e distribuzione attraverso PyPI. A questo punto, dovresti avere tutti gli strumenti per scrivere e condividere le tue librerie con il mondo.

Inoltre, non esitate a vedere quello che abbiamo disponibile in vendita e per lo studio nel marketplace e, ti prego di fare tutte le domande e fornire il vostro prezioso feedback utilizzando il feed qui sotto.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.