Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Introduzione a distutils: distribuire i propri moduli Python

Link copiato negli appunti

Qualsiasi programmatore, indipendemente dagli strumenti che usa, sa quanto sia importante rendere fruibile agli utenti il proprio prodotto, che sia un software completo oppure una libreria. Python non fa eccezione, anzi, la popolarità  di questo linguaggio la si deve in gran parte alla vasta disponibilità  di librerie che implementano funzioni specifiche ed alla semplicità  con cui possiamo renderle disponibili nel nostro sistema grazie a distutils.

Prima di vedere cos'è distutils e come si utilizza, è necessaria una breve digressione sul concetto di modulo e package che sarà  sicuramente utile a chi si trova ancora alle prime armi con Python. Un modulo non è altro che un file contenente del codice Python:

# file: aritmetica.py
def somma(a, b):
    return a+b

La cosa interessante è che altri moduli python possono utilizzare le funzionalità  implementate nel modulo aritmetica, contenuto nel file aritmetica.py:

#file: main.py
import aritmetica
a = 38
b = 4
print "La risposta è", aritmetica.somma(a,b)

Un package, invece, è una cartella nel vostro filesystem che serve a contenere un insieme di moduli correlati per funzionalità ; per far sì che python veda la vostra cartella come un package basta inserirvi un file, anche vuoto, chiamato __init__.py. Volendo creare ad esempio un nostro package "matematica", il layout sul filesystem sarebbe questo:

matematica/
    __init__.py
    artimetica.py
    algebra.py

Se il package è correttamente installato, è possibile utilizzarlo in questo modo:

#file: main.py
import matematica
a = 38
b = 4
print "La risposta è", matematica.aritmetica.somma(a,b)

Da notare che ora viene importato il package che contiene il modulo aritmetica e non il modulo stesso come nel caso precedente. Inoltre dobbiamo specificare il nome del package ogni volta che utilizziamo tale modulo.

I package possono avere una struttura complessa e spesso offrono una gamma di funzionalità  molto ampia, pertanto è piuttosto frequente l'esigenza di distribuirli ad altri utenti affinché possano utilizzarli. A questo scopo ci viene in aiuto distutils, un package già  incluso nella libreria standard di Python con il quale andremo a distribuire il nostro package matematica.

Nonostante distutils sia uno strumento potente e piuttosto complesso, per un package semplice come il nostro matematica tutta l'operazione si ridurrà  alla implementazione di un solo modulo Python chiamato setup. La prima cosa da fare è creare una cartella contenente il package da distribuire ed il file setup.py:

matematica-dist/
    setup.py
    matematica/
        __init__.py
        artimetica.py
        algebra.py

Il modulo setup contiene tutta la logica necessaria per raccogliere i file (sorgenti Python ma anche file di licenza, eventuali immagini, icone, ecc.) e posizionarli correttamente nella macchina dove verrà  distribuito il package nonché tutti i metadati ad esso associati come il nome, la versione, l'autore. Il nostro modulo setup sarà  decisamente scarno e conterrà  solo il seguente codice:

from distutils.core import setup
setup(name = "matematica",
      version = "0.1",
      description = "Package di supporto alla matematica",
      author = "HTML.it",
      author_email = "info@somedomain.com",
      url = "http://blog.html.it",
      packages=["matematica"]
      )

A questo punto possiamo eseguire da terminale lo script di setup chiedendogli di creare un pacchetto per la distribuzione del nostro package:

# python setup.py sdist
running sdist
warning: sdist: manifest template 'MANIFEST.in' does not exist (using default file list)
warning: sdist: standard file not found: should have one of README, README.txt
writing manifest file 'MANIFEST'
creating matematica-0.1
creating matematica-0.1/matematica
making hard links in matematica-0.1...
hard linking setup.py -> matematica-0.1
hard linking matematica/__init__.py -> matematica-0.1/matematica
hard linking matematica/algebra.py -> matematica-0.1/matematica
hard linking matematica/aritmetica.py -> matematica-0.1/matematica
creating dist
tar -cf dist/matematica-0.1.tar matematica-0.1
gzip -f9 dist/matematica-0.1.tar
removing 'matematica-0.1' (and everything under it)
#

Una volta terminata l'esecuzione dello script noterete la presenza di una cartella dist contenente il file matematica-0.1.tar.gz (notare che il nome del file viene composto utilizzando le informazioni contenute nel setup.py) che sarà  quello che renderemo disponibile per il download da parte degli utenti. Tutto quello che dovrà  fare un utente che intenda installare sulla propria macchina il nostro package sarà  questa semplice sequenza di comandi da terminale:

# tar xzf matematica-0.1.tar.gz && cd matematica-dist
# python setup.py install

E questo è tutto: distutils utilizzerà  le informazioni contenute nel modulo setup e si occuperò  di posizionare il nostro package nel posto giusto all'interno del sistema dell'utente. Se poi vogliamo rendere più agevole l'operazione agli utenti Windows, distutils ci consente di creare dei pacchetti autoinstallanti che non richiedono l'utilizzo del terminale. Basta lanciare il setup.py in questo modo:

# python setup.py bdist_wininst

In questo caso, terminata l'esecuzione dello script troverete nella cartella dist un eseguibile chiamato matematica-0.1.win32.exe che se eseguito lancerà  il wizard dell'installer come in figura:

mypackageinstaller-300x181.png

Per approfondire sia la parte di installazione che la parte di creazione dei pacchetti rimando alla consultazione della Guida al Packaging per Autostoppisti nonché alla documentazione ufficiale.

Ti consigliamo anche