En Python, un módulo es simplemente un archivo .py
con código que puede incorporarse a un programa mediante la importación del módulo. De esta manera, estarán disponibles en el programa todos los elementos incluidos en el módulo, que pueden ser tanto funciones como variables, tipos de datos y de estructuras de datos, clases, métodos, etcétera.
La distribución de Python incluye un conjunto de módulos que constituyen la biblioteca estándar del lenguaje, y que pueden importarse directamente mediante la directiva import
modulo
. En clases anteriores se vieron varios de estos módulos, como math
, random
, os
, sys
, argparse
, etcétera. La lista completa de módulos disponibles se puede consultar en la documentación oficial de la Biblioteca Estándar de Python.
Desarrollar un módulo definido por el usuario consiste simplemente en escribir funciones (eventualmente otros elementos) en un archivo .py
que esté accesible desde el programa que se está desarrollando (lo más sencillo es ponerlo en el mismo directorio). El nombre del módulo va a ser el mismo nombre del archivo, sin la extensión .py
.
Por ejemplo, podemos escribir la función isorritmico()
desarrollada en la tarea 5, en un archivo llamado musmod.py
:
# %load musmod.py
'''Módulo personal con funciones para procesar datos musicales'''
def isorritmico(talea, color):
'''Crea una melodía isorrítmica a partir de una talea y un color
Recibe una lista con alturas en número de nota MIDI [color]
y otra con duraciones en fracciones de beat [talea]
Devuelve una lista de notas como tuplas (altura, duración)'''
# extiende las secuencias para que tengan la misma cantidad de elementos
talea *= len(color)
color *= len(talea)
# crea la lista de notas como tuples (altura, duración)
notas = [(x, y) for x, y in zip(color, talea)]
return notas
Si el archivo musmod.py
está en el mismo directorio donde estamos desarrollando el programa, podemos importarlo como cualquier módulo:
import musmod
Si queremos darle un nombre más abrevidado (por ejemplo, mm
), podemos usar la directiva:
import musmod as mm
También se puede importar una función específica:
from musmod import isorritmico
Una vez que el módulo fue importado, todas las funciones y demás elementos contenidos en él, estarán disponibles en nuestro programa. También podemos obtener información del módulo mediante la función help()
, como ser el nombre del módulo (y su descripción, si tiene un docstring
), las funciones y otros elementos que incluye, y la ubicación del archivo.
import musmod as mm
help(mm)
Vemos que el módulo contiene una única función, y se muestra la documentación incluida en su docstring
.
La función isorritmico()
está ahora disponible para usar en nuestro código:
talea = [0.75, 0.5, 0.25, 0.5]
color = [72, 62, 59, 56, 67]
melodia = mm.isorritmico(talea, color)
for n in melodia:
print(n[0], n[1], sep='\t')
El módulo se puede extender con más funciones, hasta convertirse en toda una biblioteca de funciones relacionadas, que pueden reutilizarse en distintos programas.
En Python, un paquete es un conjunto de uno o más módulos con una organización determinada, que pueden instalarase de modo de quedar accesibles para cualquier programa que se desarrolle.
Como Python es un lenguaje muy utilizado y con una amplia base de usuarios, existe una enorme cantidad de paquetes ya desarrollados para aplicaciones específicas. Podemos mencionar por ejemplo Numpy para análisis numérico, Matplotlib para visualización y representación gráfica de datos, SciPy para computación científica, pandas para análisis y procesamiento de datos, librosa y Essentia para análisis de señales audio y música, music21 para musicología computacional y procesamiento de música en notación simbólica, carat para análisis de patrones rítmicos, etcétera.
Se pueden buscar paquetes en el Python Package Index (PyPI), un índice centralizado de paquetes disponibles para Python, con información y documentación de cada uno de ellos.
Para poder utilizar las funcionalidades incluidas en un paquete, primero debe ser instalado, lo que puede hacerse de diversas maneras.
El comando pip
viene incluido en la distribución de Python, y ofrece una forma muy fácil y conveniente de instalar y administrar cualquier paquete que esté incluido en el Python Package Index.
Se puede verificar que el comando está bien instalado, ejecutándolo desde la línea de comando con la opción --versión
o -V
:
pip --version
pip -V
La forma genérica de ejecutar el programa es:
pip <comando> [opciones]
Por ejemplo, el comando help
muestra una lista de todos los comandos y opciones disponibles:
pip help
Lo mismo puede obtenerse con la opción --help
o -h
:
pip --help
pip -h
Veamos a continuación los comandos más importantes para instalar y administrar paquetes.
El comando de pip
para instalar paquetes es install
, seguido del nombre de uno o más paquetes a ser instalados:
pip install paquete
pip install paquete1 paquete2 ...
Si se pide instalar un paquete que requiere otros, pip
se encarga automáticamente de instalar todas las dependencias.
Se pueden desinstalar paqueter con el comando uninstall
, seguido del nombre de uno o más paquetes a ser desinstalados:
pip uninstall paquete
pip uninstall paquete1 paquete2 ...
Este comando desinstala solamente los paquetes que se pasan como argumento, pero no los paquetes que se hayan instalado como dependencias.
El comando list
(sin argumentos) imprime una lista de todos los paquetes instalados, con sus versiones:
pip list
El comando show
muestra información más completa de el o los paquetes que se pasen como argumento:
pip show paquete1 [paquete2 ...]