|
Vediamo adesso DOVE vengono cercati su disco i moduli. Come molti ricorderanno, esiste nei sistemi operativi un concetto di PATH. Ovvero sono le directory dove il sistema operativo cerca i comandi quando si utilizza la riga di comando. Questo concetto esiste sia in Linux che in Windows. Python riprende il concetto di PATH, definendo un suo PYTHONPATH, che indica tutte le directory in cui l'interprete può cercare i moduli. Quando abbiamo fatto "import fact", infatti è stato cercato il file "fact.py" in tutte le directory elencate nel PYTHONPATH.
Quando parte l'interprete, elenco delle directory che compongono il PYTHONPATH viene preso dalla variabile di ambiente omonina, appunto PYTHONPATH. Questa variabile contiene una serie di nomi di directory, separati da punti e virgola in ambiente Windows, e da due punti in ambiente Linux. Una volta letta, questa variabile viene riportata in una lista chiamata "path" nel modulo standard "sys".
In breve, per sapere in quali directory si trovano i moduli, basta stampare "sys.path". Notare che il più delle volte si trovano in una delle sotto directory dell'installazione, chiamata "lib/site-packages". Si tratta in pratica nella directory preposta per contenere programmi in Python installati localmente. Se si utilizza il modulo standard dell'installazione di programmi Python noto come "distutils", questo modulo installa normalmente le applicazioni sotto site-packages.
In realtà niente impedisce di installare dove si vuole le applicazioni, e i moduli che le compongono. Solo che la sotto directory "site-packages" è solitamente già inclusa nel PYTHONPATH, e quindi non si deve fare molta fatica per decidere dove metterli. In generale, se i programmi sono installati dovunque nel disco, è necessario ampliare esplicitamente il path per trovare i moduli di una applicazione Python. Consideriam il seguente codice:
import sys
sys.path.append("lib")
Questo accoda la sotto directory "lib" della DIRECTORY CORRENTE al PYTHONPATH. Scritto così, si presume che la directory corrente sia già stata cambiata, in modo da contenere la directory "lib". Non è in frequente che vengano fatti degli script in shell o in bat per far partire i programmi in Python. Questi script sono diversi per ogni sistema operativo.
È interessante scoprire cosa c'è in un modulo: vediamo il seguente esempio:
>>> import fact
>>> fact
<module 'fact' from 'fact.py'>
>>> dir(fact)
['__builtins__', '__doc__', '__file__', '__name__', 'fact']
In pratica un modulo è un oggetto, i cui attributi sono le funzioni in esso contenute. Esiste il costrutto "dir" che permette di listarli, ed è quindi utile per scoprire interattivamente con che cosa si ha a che fare.
|