Tabla de Contenidos
En el desarrollo de software, los desarrolladores suelen trabajar en un entorno colaborativo y en constante evolución. Por esta razón, es muy recomendable que sigan pautas y prácticas de codificación comunes que garantizarán eficiencia, claridad, fácil detección de errores y una incorporación sencilla. Después de todo, es más probable que el código bien formateado y documentado sea compartido y utilizado por toda la comunidad de desarrolladores.
Aquí proponemos un conjunto de herramientas para desarrolladores Python que pueden ayudarte a alcanzar este objetivo, probadas con versiones de Python 3.8:
- Black
- Flake8
- Isort
- Mypy
- Pydocstyle
- Darglint
Black
Black es una herramienta de formato rápido que se puede usar muy fácilmente en la línea de comandos.
Reformatear tu código al estilo Black te permite producir código limpio y legible, facilitando la detección de errores.
En este ejemplo:
Ejecutando:
Devuelve:
Y transforma sample.py:
Configuración recomendada
Nota: Skip-magic-trailing-comma: para evitar que una colección se divida en un elemento por línea
Flake8
Flake8 es una herramienta que integra pycodestyle, pyflakes, y mccabe
- Pycodestyle: detecta cualquier error relacionado con el formato en el código, en relación con el cumplimiento de PEP8. A continuación, se presenta una lista no exhaustiva de errores:
E para códigos de error y W para advertencias
- E1: para errores de indentación.
- E2: para errores de espacio en blanco.
- E7: para errores de sentencia
- W6: para advertencias de obsolescencia
- Pyflakes: detecta cualquier inconsistencia en el código. A continuación, se presenta una lista no exhaustiva de errores:
F para códigos de error
- F4: para errores de importación
- F5: para errores de formato
- F6: para errores de asignaciones/comparaciones incompatibles
- F7: para errores de sintaxis
- F8: para errores relacionados con variables
- Mccabe: detecta errores de complejidad.
Código de error: C (siempre se lanza el error C901 por violación de complejidad)
En este sample.py:
Al ejecutar:
Se obtienen los siguientes errores:
Configuración recomendada
Ignoramos estos dos errores:
- E203 espacio en blanco: que está relacionado con la interacción de la herramienta black
- E501 Línea : que permite una línea más larga que la recomendación de PEP8 de 79 caracteres
También disponemos de un conjunto de plugins de flake8 que se pueden instalar:
- flake8-use-fstring: comprueba si hay % o .format y sugiere usar f-strings
- flake8-print: comprueba si hay sentencias print
- flake8-tidy-imports: escribe importaciones más ordenadas (prohíbe las importaciones de módulos padre y superiores, es decir, con más de un punto)
Isort
Isort es una herramienta que proporciona una utilidad de línea de comandos que ordena tus importaciones (alfabéticamente y separa las secciones en estándar, de terceros, propias y, finalmente, las importaciones de la carpeta local).
En este ejemplo:
Ejecutando:
Transforma sample.py:
Configuración recomendada
Necesitamos configurar el perfil a “black” para evitar interacciones negativas entre las dos herramientas.
Mypy
Mypy es un verificador de tipos estático. Para usarlo, necesitas tipar tus funciones y variables. Puedes configurar su nivel de rigurosidad si aún quieres resolver el tipo dinámicamente en algunas partes de tu código, pero ten en cuenta que tener un proyecto con tipado estático mejora la productividad y la claridad, y añade barreras de seguridad por todas partes para que puedas detectar errores incluso antes de ejecutar tu código.
En este ejemplo:
Ejecutando:
Devoluciones:
Configuración recomendada
Optamos por exigir la tipificación solo para el código de producción y no para las pruebas.
Para una nueva base de código, deberías añadir las opciones estrictas pero para código heredado, deberías añadir las opciones de mypy de forma iterativa.
Pydocstyle
Pydocstyle es una herramienta que verifica el cumplimiento de la mayoría de PEP 257 en relación con tus docstrings. Un docstring es una herramienta esencial para documentar tu código. Optamos por adoptar la convención de estilo de Google.
Implementa diferentes grupos de errores:
- D1: para Docstrings Faltantes
- D2: para Problemas de Espacios en Blanco
- D3: para Problemas de Comillas
- D4: para Problemas de Contenido de Docstring
Configuración recomendada
En el ejemplo anterior sin documentar:
Ejecutando:
Devuelve:
Deberíamos tener:
Darglint
Darglint es una herramienta para verificar que el docstring coincide con la implementación de la función o método a lo largo de todo su ciclo de vida. Evita tener documentación obsoleta cuando la firma ha cambiado. Es mejor cuando se usa en combinación con un verificador de estilo de docstrings como pydocstyle.
Implementa diferentes grupos de errores:
- DAR0: Sintaxis, formato y estilo
- DAR1: Sección de argumentos
- DAR2: Sección de retorno
- DAR3: Sección de valores generados
- DAR4: Sección de excepciones
- DAR5: Sección de variables
En el ejemplo anterior documentado:
Ejecutando:
Devuelve:
Deberíamos tener:
Integración
Nos gustaría reunir todas estas configuraciones de herramientas en un solo archivo. Para el almacenamiento de la configuración, nuestra recomendación es usar .flake8 + pyproject.toml.
Luego, si queremos ejecutarlos todos usando un solo comando, tenemos diferentes opciones:
- Script Sh o Makefile
Necesitamos definir una lista de dependencias de desarrollo como en requirements-dev.txt.
Creamos un archivo lint.sh (darglint es lanzado automáticamente por flake8 cuando está instalado en el mismo entorno, por lo que no es necesario especificarlo)
Y podemos ejecutarlo:
Si quieres usar un Makefile:
Luego ejecuta:
- Pre-commit [Preferido]
Pre-commit es otra alternativa para agrupar todas las herramientas y ejecutarlas dentro de un entorno cerrado y dedicado, por lo que ni siquiera las necesitas en un entorno de desarrollo.
Además, puede interactuar con el hook de git en relación con los archivos modificados en el commit, push, etc., antes de la subida al almacenamiento remoto de código y evitar saturar la CI por problemas de lint y estilo.
Configuración recomendada
.pre-commit-config.yaml
Conclusión
Una vez que hayas llegado a una configuración y hayas elegido un método de integración, tu flujo de trabajo será estable y productivo. Además, lo más probable es que no evolucionen mucho en el futuro, por lo que mantener una base de código con estas herramientas es una obviedad.
Además, cuando se utiliza desde el inicio de un proyecto, el coste es casi nulo, pero cuando se aplica a una base de código existente, puede llevar bastante tiempo resolver todos los errores. ¡Cuanto antes empieces, mejor!
Imagen destacada de Kuznetcov_Konstantin
Acerca de



.webp)

