Los módulos son librerías de funciones, archivos con extensión .py que contienen funciones, de manera que podemos utilizarlas en los scripts importándolas ya sea desde el propio script o desde otros módulos. El nombre del módulo es el nombre del fichero y dentro del módulo es accesible mediante la variable __name__.
Por ejemplo, el módulo fibo contiene dos funciones, fib() y print_fib(). El contenido de fibo.py es el siguiente:
def fib(n):
"Devuelve la serie de Fibonacci hasta n"
resultado = []
a = 0
b = 1
while b < n:
resultado.append(b)
a = b
b = a + b
return resultado
def print_fib(n):
"Imprime la serie de Fibonacci hasta n"
print fib(n) |
Para utilizar las funciones del módulo fibo en el intérprete interactivo las importaremos con import y podremos acceder a ellas con fibo.fib() y fibo.print_fib():
>>> import fibo >>> fibo.print_fib(200) [1, 2, 4, 8, 16, 32, 64, 128] >>> print fibo.__name__ fibo |
De la misma manera podemos utilizar las funciones de un módulo en un script:
#!/usr/bin/python import fibo print fibo.fib(100) fibo.print_fib(200) |
… obtenemos:
$ python test.py [1, 2, 4, 8, 16, 32, 64] [1, 2, 4, 8, 16, 32, 64, 128] |
También podemos importar funciones concretas de un módulo:
>>> from fibo import print_fib |
… o todas:
>>> from fibo import * |
… en cuyo caso no se referencian mediante el nombre del módulo sino por su propio nombre:
>>> print_fib(200) [1, 2, 4, 8, 16, 32, 64, 128] |
Nota
En general es preferible import fibo que from fibo import *, ya que esto último da como resultado código menos legible y mayor probabilidad de conflictos de nombres.
Cuando se importa un módulo el intérprete busca el fichero en la lista de directorios dada por la variable sys.path, y en ese orden. El primer directorio de la lista (sys.path[0] = ”), es el directorio actual donde está ubicado el propio script:
>>> import sys
>>> sys.path
['', '/usr/lib/python2.6', '/var/lib/python-support/python2.6',
'/usr/local/lib/python2.6/dist-packages']
>>> sys.path.append('/mi/nueva/ruta')
>>> sys.path
['', '/usr/lib/python2.6', '/var/lib/python-support/python2.6',
'/usr/local/lib/python2.6/dist-packages', '/mi/nueva/ruta'] |
La función dir() enumera la lista de nombres definidos actualmente (todo tipo de nombres: variables, módulos, funciones, etc.):
>>> dir() ['__builtins__', '__doc__', '__name__', '__package__'] >>> import fibo >>> dir() ['__builtins__', '__doc__', '__name__', '__package__', 'fibo'] >>> dir(fibo) ['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'fib', 'print_fib'] |
Los nombres de las funciones y variables internas están definidos en el módulo estándar __builtin__:
>>> import __builtin__ >>> dir(__builtin__) ['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BufferError', 'BytesWarning', 'DeprecationWarning', 'EOFError', 'Ellipsis', ... 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'unichr', 'unicode', 'vars', 'xrange', 'zip'] |
Módulos interesantes
| Módulos interesantes | |
| Tema | Módulo |
| Interfaces gráficas | pyGtk pyQT PyKDE Pmw Tkinter 3000 Tix |
| Bases de datos | MySQL-Python Gadfly psycopg kinterbasdb cx_Oracle pySQLite |
| MSN Messenger | msnlib msnp |
| Imágenes | PIL gdmodule VideoCapture |
| Ciencias | scipy NumPy matplotlib |
| Vídeo-juegos | Pygame pyOpenGL |
| Jabber | jabberpy |
| Web | scrape pythonweb mechanize Feed Parser |
| Geo-localización | geoname.py |
| Puerto serie | pySerial USPP |
| Puerto paralelo | pyParallel |
| Puerto USB | pyUSB |
| Windows | ctypes pywin32 pywinauto pyrtf wmi |
| PDA/GSM/Móviles | pymo pyS60 |
| Sonido | pySonic pyMedia FMOD pyMIDI |
| GMail | libgmail |
| pyGoogle | |
| Expect | pyExpect |
| WordNet | pyWordNet |
Recursos
- Python Package Index: PyPI