Proyectos Python con Poetry y VSCode Parte 2 - Hoja de Trucos Python

En el primer artículo aprendimos qué es el archivo pyproject.toml y cómo trabajar con él, usamos Poetry para iniciar un nuevo proyecto, crear un Entorno Virtual y para añadir y eliminar dependencias. Todo esto con los siguientes comandos:
| Command | Description |
|---|---|
poetry new [package-name] | Iniciar un nuevo Proyecto Python. |
poetry init | Crear un archivo pyproject.toml interactivamente. |
poetry install | Instalar los paquetes dentro del archivo pyproject.toml. |
poetry add [package-name] | Añadir un paquete a un Entorno Virtual. |
poetry add -D [package-name] | Añadir un paquete de desarrollo a un Entorno Virtual. |
poetry remove [package-name] | Eliminar un paquete de un Entorno Virtual. |
poetry remove -D [package-name] | Eliminar un paquete de desarrollo de un Entorno Virtual. |
En esta segunda parte, vamos a:
- Añadir nuestro Entorno Virtual a VSCode.
- Actualizar nuestras dependencias.
- Integrar nuestras dependencias de desarrollo con el editor:
- Flake8
- Black
- Pytest
Y en un tercer artículo escribiremos una librería de ejemplo, construiremos nuestro proyecto con Poetry y lo publicaremos en PyPI.
Antes de empezar, asegúrate de haber instalado VSCode, añadido la extensión de Python y de haber seguido y entendido el primer artículo de esta serie.
Configuración de Poetry en VSCode
Han pasado unos días desde la primera parte, por lo que puede ser una buena idea comprobar si hay nuevas versiones de nuestras dependencias. Abre tu terminal, navega dentro del directorio de tu proyecto y escribe el comando poetry update:

Hasta ahora, no hay nuevas versiones disponibles.
Cuando creas un Entorno Virtual con el comando venv, VSCode lo establecerá automáticamente como el Entorno Python predeterminado para ese proyecto. Al trabajar con Poetry, la primera vez necesitaremos escribir lo siguiente en la terminal y dentro de la carpeta del proyecto:
poetry shell
code .
El primer comando, poetry shell, nos introducirá en nuestro entorno virtual, y code . abrirá la carpeta actual dentro de VSCode.

Abre la carpeta how-long (o la que tenga el nombre de tu proyecto) usando el panel izquierdo y junto a __init__.py, crea un archivo how-long.py. En la esquina inferior izquierda, verás el Entorno Python actual:

Haz clic en él y se mostrará una lista de los Entornos disponibles. Elige el que tenga el nombre de tu proyecto:

Ahora, vamos a integrar nuestras dependencias de desarrollo, Flake8, Black y Pytest en Visual Studio Code.
Flake8
Flake8 proporcionará a nuestros proyectos capacidades de linting. En otras palabras, advertirá de errores de sintaxis y estilo, y gracias a VSCode, los conoceremos mientras escribimos.
Por defecto, la extensión de Python viene con Pylint habilitado, que es potente pero complejo de configurar. Para cambiar a Flake8, realiza un cambio en cualquier archivo Python y guárdalo; en la esquina inferior derecha aparecerá un mensaje emergente:

Haz clic en Select Linter y elige Flake8 de la lista. Ahora, VSCode nos indicará nuestros problemas de sintaxis y estilo, en verde o rojo dependiendo de su gravedad, siempre con una bonita descripción de lo que está mal:

Parece que tenemos dos problemas: nos falta una línea en blanco al final de nuestro archivo (estilo) y olvidamos añadir comillas a nuestra cadena de Hello, World! (sintaxis). Arréglalos y verás cómo desaparecen todas las advertencias.
Black
Black es un formateador de código, una herramienta que mirará nuestro código y lo formateará automáticamente cumpliendo con la guía de estilo PEP 8, la misma PEP que usa Flake8 para revisar nuestros errores de estilo.
Mantén pulsado shift + cmd/ctrl + p para abrir la Paleta de Comandos, escribe Format Document y pulsa enter. Aparecerá un nuevo mensaje emergente:

Selecciona Use Black. Ahora copia este código mal formateado en tu archivo python:
for i in range(5): # this comment has too many spaces
print(i) # this line has 6 space indentation.
Qué pedazo de c***… código más feo. ¡Intenta formatearlo de nuevo y mira cómo Black los arregla todos por ti!
Otra cosa que podemos hacer es configurar VSCode para que cada vez que guardemos, Black formatee automáticamente nuestro código. Mantén pulsado cmd/ctrl + , para abrir la Configuración. Asegúrate de estar en la Workspace Settings, busca Format On Save y activa la casilla:

Por último, Black tiene por defecto 88 caracteres por línea en contraste con los 80 permitidos por Flake8, por lo que para evitar conflictos, abre la carpeta .vscode y añade lo siguiente al final del archivo settings.json:
{
...
"python.linting.flake8Args": [
"--max-line-length=88"
],
}

Pytest
Si te tomas en serio la programación, es crucial que aprendas a probar tus proyectos. Es una habilidad increíblemente útil que te permite escribir y entregar programas con confianza al reducir la posibilidad de que aparezcan errores catastróficos después del lanzamiento.
Pytest es un framework muy popular y fácil de usar para escribir pruebas. Ya lo instalamos, así que también lo integraremos con VSCode.
Abre la carpeta tests y selecciona el archivo test_how_long.py. Poetry ya nos proporciona nuestra primera prueba:
# test_how_long.py
from how_long import __version__
def test_version():
assert __version__ == '0.1.0'
En esta prueba, importamos la variable __version__ del archivo __init__.py que está dentro de la carpeta how_long y afirmamos que la versión actual es 0.1.0. Abre la terminal integrada yendo a Terminal > New Terminal y escribe:
pytest
La Salida se verá así:

Ok, todo está bien. Abre tu Paleta de Comandos con shift + cmd/ctrl + p:
- Escribe unit y selecciona Python: Configure Unit Tests.
- Selecciona pytest.
- Elige el directorio donde guardaste las pruebas, tests en nuestro caso.
Tres cosas sucedieron:
Apareció un nuevo botón en la barra de estado: Run Tests. Esto es lo mismo que escribir pytest en la terminal. Púlsalo y selecciona Run All Unit Tests. Cuando termine, te informará del número de pruebas que pasaron y las que no:

Un nuevo icono en la barra lateral izquierda. Si haces clic en él, aparecerá un panel que muestra todas las pruebas. Aquí, puedes ejecutar cada una individualmente:

Dentro del archivo de prueba, aparecerán nuevas opciones antes de cada función de prueba: aparecerá un icono de verificación si está bien, y una x si no lo está. También te permite ejecutar pruebas específicas:

Conclusión
Hasta ahora, hemos:
- Iniciado un nuevo proyecto, creado un Entorno Virtual, y añadido, eliminado y actualizado dependencias.
- Añadido nuestro Entorno Virtual a VSCode, Configurado Flake8 para revisar nuestro código mientras escribimos, seleccionado Black como formateador e incluido Pytest para ejecutar nuestras pruebas visualmente.
Finalmente, en el tercer y último artículo, vamos a:
- Escribir una librería de ejemplo.
- Construir nuestro proyecto con Poetry.
- Publicarlo en PyPI.