Python importazioni di moduli dalla libreria standard esterni e propri

Autore:[Antonio Gallonetto]

Python ha una vastissima libreria di funzionalità scritte dagli utenti e sviluppatori utilissima per agevolarci nel creare i nostri programmi.

Il vantaggio di avere una libreria con le funzionalità che ci servono, è che quest’ultima è in continuazione sviluppata estesa e manutenuta e non deve essere di volta scritta controllata, modificata, verificati eventuali risultati inattesi. Tutto questo lavoro è già stato fatto, quindi usare le funzionalità già scritte per lo sviluppatore è più veloce e sicuro.

Sintassi per l’importazione di un modulo

import nomeModulo

In questo caso il linguaggio importa l’intera libreria delle funzionalità

import nomeModulo ad nomeAlias

Possiamo associare un nome più facile da ricordare o più compatto da richiamare usando un alias.

Esempio di uso di un alias

import time as lib_time in questo caso associamo alla libreria il nome lib_time.
Potrei fare una cosa di questo tipo perché magari uso la convenzione che tutte le librerie che vado ad usare iniziano per lib_, in questo modo quando andrò a richiamare un metodo della libreria time riporterò lib_time.nome_metodo.
Il codice risulta più leggibile e so già che time è un modulo esterno.

from nomeModulo import nomeFunzione1 nomeFunzione2 nomeFunzionen

In questo caso non mi servono tutte le funzionalità del modulo e vado ad importare solo quelle che mi servono.

from nomeModulo import *

In questo caso python importa tutti gli elementi della libreria nomeModulo tranne quelli che iniziano con un underscore _.
Questa funzionalità è poco usata perché rende il codice poco leggibile.

Un modulo contiene funzionalità e una parte di esecuzione

La parte di esecuzione del modulo è quella di inizializzazione e di creazione degli oggetti, in molti casi senza questa parte le funzionalità non possono essere eseguite.

Richiamare le funzionalità di un modulo

nomeModulo.funzionalità oppure nomeAlias.funzionalità

Dove cerca Python i moduli

Inizia dalla directory corrente dello script che andiamo ad eseguire e poi nei percorsi elencati da sys.path.
Per visualizzare i nostri percorsi possiamo digitare

import sys
print(sys.path)

Possiamo aggiungere un percorso di ricerca con:

import sys
sys.path.append("Percorso da aggiungere")

Creare e importare i nostri moduli

Un buon metodo di programmazione è cercare di separare le funzionalità dalle chiamate vere e proprie perché questa pratica favorisce la portabilità e il riutilizzo del codice.
Per esempio se ho una serie di funzionalità che verificano le varie parti del codice fiscale, le inserirò in un modulo a parte e poi andrò a richiamarle nel programma vero e proprio dopo aver importato il modulo.
Il nostro interprete le cerca nella stessa cartella dello script se vogliamo usare una sottocartella dobbiamo usare la funzione sys.path.append(“Percorso da aggiungere”)

Esempio di importazione di un modulo in una sottocartella

Ho creato la cartella funzioni dove mettere i vari files con le funzioni. Di seguito un esempio di importazione del modulo fun_len_str nella cartella funzioni.

##lunghezza stringa
import os
abs_path=os.getcwd()
## abs_path contiene il percorso assoluto corrente
import sys
sys.path.append(abs_path+"/funzioni")
## aggiungo al percorso di ricerca il percorso assoluto di funzioni

import fun_len_str as my_fun
my_string = input("Inserisci la stringa da visualizzare la lunghezza: ")
my_fun.len_str(my_string)

Esempio precedente reso indipendente dal sistema operativo

In questo esempio cerchiamo di rende il nostro codice indipendente dalla piattaforma sulla quale sta girando anche se Python cerca comunque di mettere apposto le cose e l’esempio di prima funziona anche su Windows anche se i percorsi sono indicati in modo diverso.

import os
abs_path=os.getcwd()
dir_to_include="funzioni"

if '\\' in abs_path:
    newPath=abs_path+"\\"+dir_to_include
else:
    newPath=abs_path+"/"+dir_to_include

import sys
sys.path.append(newPath)
import fun_len_str as my_fun

my_string = input("Inserisci la stringa da visualizzare la lunghezza: ")
my_fun.len_str(my_string)

In questo caso sfrutto il fatto che windows indica le directory con \ mentre linux e mac con / per identificare il sistema operativo e rendere portabile il mio codice.

Visualizzare i metodi presenti in un modulo

Il comando per visualizzare i nomi dei metodi presenti in un modulo è dir(nomeModulo), è necessario importare il modulo prima di poter dare questo comando.
Questo comando visualizzerà il nostro metodo e quelli ereditati dall’oggetto padre, nel nostro caso il risultato è:

['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'len_str']

Ulteriori informazioni sul modulo

Per avere un ulteriore aiuto su dei metodi di un modulo importato o sul modulo stesso si piò usare la funzione help.
Sintassi: help(nomeModulo) oppure help(nomeModulo.nomeMetodo)