Módulos
https://docs.python.org/pt-br/3/tutorial/modules.html
Los módulos son conjuntos de nuevos recursos que podemos importar a Python. Lo que es un plugin para un programa, una extensión para el navegador, es lo que el módulo es para Python. Haciendo otra analogía, compramos un auto básico (Python) y le ponemos varias mejoras (Módulos Python), como aire acondicionado, dirección hidráulica, techo solar, asientos de cuero, etc. En otros lenguajes también los llamamos bibliotecas, paquetes...
No tendría sentido que el intérprete Python tuviera todo lo disponible si solo fuéramos a crear un programa para leer y escribir de la base de datos. Tendríamos un binario inflado de recursos no útiles para este caso y muchos recursos que podrían incluso generar fallas de seguridad.
De esta forma necesitamos cargar los módulos a medida que sea necesario.
Un módulo puede contener definiciones de funciones que son consideradas partes ejecutables o definiciones de clases, como si fuera crear un nuevo tipo de objeto.
Piensa en una función como un adaptador de enchufe. Tienes entradas y una salida. A veces una única entrada solo para transformar algo en una salida específica, o tiene 2, 3 entradas para también generar una salida específica. A veces tiene hasta 10 entradas como en el caso de una regleta de enchufes, pero solo una salida.
Los módulos se crean para ser reutilizados nuevamente. Si tienes una funcionalidad en un programa A la misma en el programa B y en el C, es hora de crear un módulo.
Al final los programas son como armar lego. Piensa en los módulos como varios tipos de piezas que vas dejando disponibles en tu cajita.
Para traer un módulo adentro necesitamos importar usando import.
Algo que veo mucho hacer es importar un módulo entero para usar solo 1 recurso. Es como descargar un álbum completo para escuchar solo una de 15 canciones que tenemos.
Vamos a llevarlo al módulo math. El módulo math nos trae varios recursos de matemática, pero vamos a usar solo la función de cálculo de raíz cuadrada (sqrt), ve la diferencia.
En este caso importé el módulo math completo para usar la función sqrt() que recibe un número de entrada y devuelve la raíz cuadrada de él que fue asignada a la variable raiz. Este es el caso en que quedamos con todas las funcionalidades disponibles para uso del módulo math.
>>> import math
>>> raiz = math.sqrt(49)
>>> print(raiz)
7.0
En este caso importé solo sqrt del módulo math y observa.
>>> from math import sqrt
>>> raiz = sqrt(49)
>>> print(raiz)
7.0
>>>
Si quisiéramos dar otro nombre al módulo math podríamos hacer lo siguiente...
>>> import math as matematica
>>> raiz = matematica.sqrt(49)
>>> print (raiz)
7.0
>>>
¿Dónde encuentro los módulos?
Documentación oficial https://docs.python.org/3/library/index.html
Volviendo al tema de tener un IDE preparado, si escribes import en un script python (archivo con extensión .py) y si seguiste las recomendaciones con vscode, presiona CTRL + espacio y ve vscode mostrándote todos los módulos built in de python.

De acuerdo con lo que vayas necesitando, vas estudiando. No necesitas conocer todo esto. Hasta el final del estudio conocerás los principales módulos built in, y cuando hagas algo específico, estudia el caso. Dale un vistazo por encima a lo que hay disponible solo para conocer.
Hay módulo para casi todo, puedes creer. Tu dolor tiene 99.99999% de probabilidad de ser el de alguien.
Además de los módulos built in de Python, tenemos paquetes extras que pueden ser desarrollados por terceros y que puedes importar para uso.
Si vas a https://pypi.org/ busca lo que pueda interesarte y ve si ya hay algo hecho. Además cuando hagas algo y quieras disponibilizarlo para la comunidad podrás publicarlo aquí.
Atención: Siempre verifica la licencia del código de terceros y el mantenedor del módulo. Da preferencia a las licencias MIT, BSD y Apache. Busca siempre módulos que reciban actualizaciones, posean más de un mantenedor y tengan buenas estrellas.
Cuando tengas conocimiento suficiente, analiza el código del módulo, siempre es bueno para aprender y ver lo que hay dentro antes de importarlo a tu código.
Vamos a hacer una prueba buscando por qrcode

Ambientes virtuales
Si instalamos las bibliotecas del PyPI directamente en el Python principal del sistema podemos crear conflictos y dejar el ambiente muy lleno de bibliotecas que pueden volverse obsoletas. Para resolver estos problemas lo recomendado es crear un sandbox, un ambiente separado donde podemos tener una copia del ambiente Python aislada donde no corremos el riesgo de crear conflictos.
Vamos ahora a preparar un proyecto con un venv (virtual environment)
# creando una carpeta para un proyecto y entrando en ella
mkdir proyecto
cd proyecto
# creando el archivo main.py del proyecto
touch main.py
# creando una carpeta venv en el proyecto e inicializando el virtual environment
python -m venv venv
# Si quieres la carpeta oculta
# python -m venv .venv
Observa que creó una copia del python dentro de esa carpeta
❯ ls -a venv
total 24K
drwxr-xr-x 5 david david 4.0K Jun 3 11:43 .
drwxr-xr-x 3 david david 4.0K Jun 3 11:43 ..
drwxr-xr-x 2 david david 4.0K Jun 3 11:43 bin
drwxr-xr-x 3 david david 4.0K Jun 3 11:43 include
drwxr-xr-x 3 david david 4.0K Jun 3 11:43 lib
lrwxrwxrwx 1 david david 3 Jun 3 11:43 lib64 -> lib
-rw-r--r-- 1 david david 169 Jun 3 11:43 pyvenv.cfg
Allí dentro de la carpeta bin es donde encontramos el python y también otras herramientas como el pip y a partir de ahora todos los módulos que instalemos van dentro de la carpeta lib de este proyecto.
Ya tienes un proyecto con un virtual environment, pero es necesario activar ese ambiente cuando vayas a usar y desactivar cuando no. Dentro de la carpeta venv/bin/ tenemos el activate que necesita ser cargado.
source ./venv/bin/activate
Para asegurarte de que el ambiente está funcionando correctamente usa el módulo site. Observa que algunas carpetas cambiaron al path del proyecto.
❯ python3 -m site
sys.path = [
'/home/david/gitlab/proyecto',
'/usr/lib/python311.zip',
'/usr/lib/python3.11',
'/usr/lib/python3.11/lib-dynload',
'/home/david/gitlab/proyecto/venv/lib/python3.11/site-packages',
]
USER_BASE: '/home/david/.local' (exists)
USER_SITE: '/home/david/.local/lib/python3.11/site-packages' (doesn't exist)
ENABLE_USER_SITE: False
Y también podemos verificar cuál binario python será accionado cuando se invoque
which python
/home/david/gitlab/proyecto/venv/bin/python
Para desactivar solo escribe
deactivate
# para verificar ejecuta site nuevamente y ve hacia dónde está apuntando
❯ python3 -m site
sys.path = [
'/home/david/gitlab/proyecto',
'/usr/lib/python311.zip',
'/usr/lib/python3.11',
'/usr/lib/python3.11/lib-dynload',
'/usr/lib/python3.11/site-packages',
]
USER_BASE: '/home/david/.local' (exists)
USER_SITE: '/home/david/.local/lib/python3.11/site-packages' (doesn't exist)'
ENABLE_USER_SITE: True
# Verifica ahora cuál python está cargado
❯ which python
/usr/bin/python
Siempre que abras un terminal, antes de ejecutar los comandos deberás activar el ambiente virtual de tu proyecto.
En vscode si en la carpeta del proyecto encuentra el venv lo mostrará junto a la extensión.
Si estás versionando el código recuerda poner la carpeta venv o .venv para no versionar sino tu repositorio quedará muy grande, ya que esa carpeta tiene cientos de archivos.
echo 'venv/' >> .gitignore
Instalando módulos
Asegúrate de estar en algún ambiente virtual primero, sino será instalado en todo el sistema.
https://packaging.python.org/en/latest/tutorials/installing-packages/
En la propia documentación del módulo muestra el comando para instalarlo usando pip. El pip es el gestor de paquetes de Python. El pip buscará en pypi el módulo para poder instalarlo en tu sistema. Pero si haces esto directamente en el sistema ese módulo quedará disponible en todo tu sistema operativo y fuera de la carpeta del proyecto.
Para instalar el gestor pip:
## base debian
sudo apt install python-pip
## base red-hat
sudo yum install python-pip
## base arch
sudo pacman -S python-pip
## Windows en cmd
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
Para actualizar pip ¡usando pip!
python3 -m pip install --upgrade pip
Vamos a instalar por ejemplo un paquete que es otro terminal python (IPython) más evolucionado que el terminal estándar. Este terminal tiene salidas coloridas para el output, facilita la lectura y tiene herramientas más fáciles para obtener ayuda. El Ipython es una versión del intérprete Python que posee más funcionalidades y tiene tab para el auto-complete.
python3 -m pip install ipython
❯ ipython
Python 3.11.3 (main, Apr 5 2023, 15:52:25) [GCC 12.2.1 20230201]
Type 'copyright', 'credits' or 'license' for more information
IPython 8.14.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]: 6+5
Out[1]: 11
In [2]: ?
In [3]: p<tab>
pass property %pastebin %pdoc %pinfo %popd %prun %psource %pycat %%python
pow() %page %pdb %%perl %pinfo2 %pprint %%prun %pushd %pylab %%python2
print() %paste %pdef %pfile %pip %precision %psearch %pwd %%pypy %%python3
Ejercicio 1 - random
Crea un archivo random.py e importa el módulo random e imprime un número aleatorio creado por esa biblioteca.
Crea un proyecto con un venv y actívalo para los próximos ejercicios. Todos deberán estar en el mismo proyecto.
Ejercicio 2 - emojis
Instala una lib de emojis e imprime algunos en pantalla, haz ejemplos que la propia lib te proporcionó. El código está en
Ejercicio 3 - Int
Lee un número real y solo muestra la parte entera. Utiliza módulo math para eso. El código está en int_part.py
También existe la conversión por tipo de variables, no vamos a olvidarlo, pero no uses en este ejercicio.
>>> real = float(4.5677)
>>> entero = int(real)
>>> print(entero)
4
>>>
Ejercicio 4 - Sorteo
Lee el nombre de 4 frutas y sortea una. Para este ejercicio solo importa exactamente lo que vayas a usar. Código en sort_frutas.py
Ejercicio 5 - Sorteo con Orden
Lee el nombre de 4 frutas y sortea una. Para este ejercicio solo importa exactamente lo que vayas a usar. Código en sort_frutas.py
Ejercicio 6 - Tocar Música (Desafío)
Utiliza un módulo python para abrir y reproducir un archivo mp3. Intenta buscar módulos que hagan este trabajo, no reinventes la rueda. Solo ve el código si realmente no pudiste hacerlo. El archivo mp3 puede ser de tu elección o Euphoria.mp3. Coloca el archivo junto con el script para facilitar tu vida en este momento. Es necesario que busques lo máximo que puedas en Internet cómo hacer esto, para más tarde hablar de tu sufrimiento. Solo ve el código después de haber sufrido mucho... Código en playmp3.
import os
os.system("mpg123 " + "Euphoria.mp3")
Vamos a tener una conversación
El mundo de TI es un estudio eterno. A veces te agarras en una línea de código y pasas el día para encontrar el problema, o cómo resolver. Es un buen momento para reflexionar si esto es para ti o no. Programar es un desafío constante.
Elige correctamente los módulos
Muchos módulos dejan de actualizarse con el paso del tiempo. Los desarrolladores abandonan sus proyectos fácilmente, ya que no los usan más, o están involucrados con otra cosa, etc. Fallas de seguridad, bugs, y otras cosas pueden aparecer.
CVE significa "Common Vulnerabilities and Exposures" (Vulnerabilidades y Exposiciones Comunes). Es un sistema internacional de identificación, clasificación y catalogación de vulnerabilidades de seguridad en software y hardware. Es una base de datos que muestra las vulnerabilidades de las libs y si fueron corregidas en alguna otra versión o no.
- Si una lib no tiene nadie corrigiendo esas fallas quedará con la vulnerabilidad expuesta. He aquí la importancia de usar módulos bien conceptuados y con bastantes mantenedores, buena evaluación, para evitar que TÚ, tengas que resolver el problema.
- Libs que reciben actualización constante además de corregir las fallas traen nuevas funcionalidades.
- Algunas libs solo funcionan con versión específica de python por no tener actualización para las nuevas versiones, forzando el uso de un python antiguo que también puede tener vulnerabilidades.
Busca en internet las libs más usadas, verifica en pypi.org antes de usar.
Módulo que necesita ser dominado
No necesitas asustarte, pero hasta terminar el estudio intenta dominar estas libs:
- RE: que hace tratamiento de regex, para validación de datos
- DateTime: Para manipular time
- Statistics: Para completar la lib math
- functools: Funciones que reciben y retornan otra función.
- Socket: para comunicarse a través de la red
Módulos para tener en mente en el futuro
Aquí algunas bibliotecas para que queden en el conocimiento de que existen y pueden ser utilizadas en el ambiente de trabajo en el futuro. No están listadas aquí bibliotecas que son nativas de python, solo aquellas que necesitan ser importadas.
No te preocupes en dominarlas mientras no las necesites, ve ganando conocimiento a lo largo del camino. Sabe que existe para cuando lo necesites.
Para sitios:
Para data science e inteligencia artificial:
Gráfico de visualización de datos:
- https://pypi.org/project/plotly/
- https://pypi.org/project/matplotlib/
- https://pypi.org/project/seaborn/
- https://pypi.org/project/streamlit/
Inteligencia artificial
- https://pypi.org/project/tensorflow/
- https://pypi.org/project/keras/
- https://docs.opencv.org/
- https://scikit-learn.org/stable/
- https://github.com/pytorch/pytorch
- https://www.nltk.org/
- https://pypi.org/project/Pillow/
Automatizaciones:
- https://pypi.org/project/selenium/
- https://pypi.org/project/Scrapy/
- https://www.crummy.com/software/BeautifulSoup/bs4/doc/
- https://pypi.org/project/PyAutoGUI/
- https://pypi.org/project/pyodbc/
- https://pypi.org/project/pywin32/
Creación de interfaces gráficas: