Posted on April 23, 2019· Updated on July 3, 2022

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

#python #intermediate #vscode #packaging
Image for 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:

CommandDescription
poetry new [package-name]Iniciar un nuevo Proyecto Python.
poetry initCrear un archivo pyproject.toml interactivamente.
poetry installInstalar 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:

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.

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:

python version

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

choose python

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:

flake8

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:

linting

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:

black formatter popup

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:

format on save

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"
    ],
}

black-settings

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í:

pytest

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:

    test status bar

  • 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:

    test side panel

  • 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:

    test inline

Conclusión

Hasta ahora, hemos:

Finalmente, en el tercer y último artículo, vamos a:

  • Escribir una librería de ejemplo.
  • Construir nuestro proyecto con Poetry.
  • Publicarlo en PyPI.