Python. Librerie

I moduli

# carico il modulo pippo
import pippo

# richiamo le funzioni fornite dal modulo pippo
pippo.funzione1()
pippo.funzione2()

...

# definire un alias per la funzione2 del modulo pippo,
# per poterla richiamare più velocemente
ciao = pippo.funzione2

ciao()

I package

I package sono equivalenti a delle directory che raggruppano dei moduli. Una libreria molto complicata è formata ragionevolmente da molti moduli, raggruppati in un unico package che a sua volta è diviso in vari subpackage.

# Si importa il package scipy
import scipy
scipy.integrate.quad()

# Oppure si importa il singolo modulo
import scipy.integrate
scipy.integrate.quad()

# Oppure si importa il singolo modulo in modo da poterlo usare
# senza il prefisso del pacchetto
from scipy import integrate
integrate.quad()

Compilare pacchetti

Per compilare pacchetti o singoli moduli per Python è spesso necessario un compilatore C++. Io preferisco MinGW che è già compreso nelle librerie Qt e che fornisce anche il comando make, chiamato mingw32-make.

Fare molta attenzione che la PATH sia più libera possibile. Spesso accade che un file di libreria venga trovato prima in qualche altra cartella perché un programma installato sul vostro pc è stato scritto con quelle librerie. Mi è capitato per esempio quando cercavo di compilare le PyQt. PyQt ha bisogno delle librerie Qt e tra i tanti file anche il file QtCore4.dll. Nella mia PATH era però compresa anche la directory degli eseguibili di MiKTeX, all'interno della quale si trovava una copia (vecchia) di QtCore4.dll! A causa dell'ordine della PATH, a causa del funzionamento dello script qtdirs.exe e a causa del fatto che non avevo fatto girare il file qtenv.bat che avrebbe rimesso le cose a posto prima della compilazione, la configurazione andava in errore perché non veniva trovata una funzione nella libreria (la funzione era presente solo nella nuova versione che però non veniva caricata).

Le variabili d'ambiente QTDIRS, QMAKESPEC, ecc... sono oramai obsolete e non dovrebbero essere più settate manualmente.

(check PATH and few other things)
python configure.py (sometimes you have to specify some options)
mingw32-make
mingw32-make install

Modules e Packages

module: la minima entità di codice riusabile in Python. Se contenuto in un unico file .py viene detto a volte pure module.

package: un modulo che contiene altri moduli. Praticamente consiste di una directory contenente diversi .py corrispondenti a diversi moduli. La directory e il suo contenuto vengono riconosciuti come un package nel momento che la cartella comprende anche un file __init__.py (solitamente vuoto). Il nome della directory corrisponde al nome del pacchetto.

import package.module
from package import module

Fare semplicemente import package corrisponde a caricare il solo file __init__.py, che solitamente è vuoto. Però lo si può usare per fare qualcosa.

L'__init__.py è fondamentale per organizzare il materiale in un progetto realizzato con Python. Spesso vorrete organizzare il vostro sorgente in cartelle. Per esempio le classi dell'interfaccia grafica, solitamente generate in automatico, si mettono in una cartella chiamata ui (user interface). La presenza di un file __init__.py dentro la cartella ui permette di poter richiamare l'interfaccia grafica nel file principale del progetto.

Dove vengono cercati i moduli. sys.path, PYTHONPATH (variabile d'ambiente)