Importando funciones y paquetes#
Muy a menudo, necesitamos herramientas que no están proporcionadas directamente por la biblioteca estándar de Python. En ese caso, necesitamos importar las funciones necesarias de módulos o paquetes en nuestros notebooks o scripts. Algunos módulos vienen directamente con la distribución de Python (como el módulo math visto en Matemáticas básicas en Python), y otros como Numpy, scikit-image, etc. son paquetes externos instalados con pip o conda. En cuanto a la importación, funcionan de la misma manera, y tenemos múltiples formas de importar funciones individuales o grupos de ellas.
Importación básica#
La declaración de importación básica utiliza las palabras clave import y el nombre del módulo. Por ejemplo, con el módulo básico de Python pathlib que maneja rutas y nombres de archivos:
import pathlib
Si queremos importar un paquete externo, necesitamos asegurarnos de que esté realmente instalado, de lo contrario obtendremos un mensaje de error:
import absent_package
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
Input In [14], in <cell line: 1>()
----> 1 import absent_package
ModuleNotFoundError: No module named 'absent_package'
Si te falta un paquete, puedes instalarlo directamente desde el notebook usando pip o conda. Por ejemplo, si Numpy aún no está instalado, podrías ejecutar:
conda install -c conda-forge numpy
Collecting package metadata (current_repodata.json): done
Solving environment: done
# All requested packages already installed.
Note: you may need to restart the kernel to use updated packages.
Formulación alternativa de importación#
Usando la formulación simple anterior, obtenemos acceso a funciones directamente adjuntas al paquete principal. Vamos a importar el paquete Numpy que usaremos más adelante para manejar imágenes. Podemos importarlo:
import numpy
y ahora obtenemos acceso, por ejemplo, a la función coseno de Numpy simplemente usando la notación de punto:
numpy.cos(3.14)
-0.9999987317275395
Para encontrar todas las funciones disponibles en un paquete o módulo, normalmente tienes que ir a su documentación y buscar la Interfaz de Programación de Aplicaciones o API. Por ejemplo, aquí encontramos una descripción de todas las funciones matemáticas (incluido el coseno) de Numpy: https://numpy.org/doc/stable/reference/routines.math.html
Acortamiento de nombres#
Si usamos un paquete regularmente, es posible que no queramos escribir el nombre completo del paquete cada vez que necesitemos una función de él. Para evitar eso, podemos abreviarlo en el momento de la importación usando la declaración as:
import numpy as np
np.cos(3.14)
-0.9999987317275395
Funciones específicas#
Si solo necesitamos una función específica de un paquete, también podemos importarla usando la declaración from. Por ejemplo, si solo queremos importar la función np.cos de arriba:
from numpy import cos
cos(3.14)
-0.9999987317275395
Por supuesto, en este caso, a menos que encontremos la línea específica donde se importa la función, no sabemos que cos necesariamente pertenece a Numpy, ya que también podríamos haber definido tal función en el notebook.
Sub-módulos#
En paquetes más grandes como Numpy, algunas funciones son directamente accesibles desde el paquete principal (como np.cos) y otras con tareas más especializadas se agrupan por tema o dominio en submódulos. Por ejemplo, Numpy tiene un submódulo dedicado a distribuciones llamado random. Todos los puntos vistos anteriormente siguen siendo válidos aquí.
Usamos la notación de punto para acceder a las funciones, pero ahora necesitamos especificar también el nombre del submódulo. Por ejemplo, la función normal que genera números extraídos de una distribución normal:
np.random.normal()
1.8077301364791438
Podemos acortar la llamada a la función importando solo el submódulo:
from numpy import random
random.normal()
0.0909924357071552
y podemos acortar aún más importando solo la función:
from numpy.random import normal
normal()
0.0038794083334154307
Ejercicio#
El paquete Numpy tiene un submódulo de álgebra lineal llamado linalg. El siguiente código calcula la norma de un vector: np.linalg.norm([1,2]). Intenta:
importar solo el submódulo y llamar a la misma función
importar solo la función
normy llamarla