Buenas prácticas modernas de Python según Stuart Ellis
(stuartellis.name)Buenas prácticas modernas para el desarrollo con Python
Las buenas prácticas modernas de Python de Stuart Ellis abordan puntos importantes a considerar al desarrollar con Python. Los temas principales son los siguientes:
Uso de Python
- Evitar usar el Python integrado en el sistema operativo: el Python incluido en el sistema operativo puede ser una versión antigua.
- Instalar Python con herramientas que soporten múltiples versiones: usar herramientas como pyenv o mise.
- Usar la versión más reciente de Python: usar la versión estable más reciente para obtener parches de seguridad y mejoras de rendimiento.
- Usar pipx para ejecutar aplicaciones de desarrollador: ejecutar aplicaciones en entornos aislados mediante pipx.
- Usar herramientas de proyecto: se recomiendan PDM, Hatch, Mise y Rye.
Desarrollo de proyectos en Python
- Formateo de código: usar Ruff.
- Linting de código: se recomienda Ruff.
- Pruebas con pytest: usar plugins relacionados (pytest-randomly, pytest-cov).
- Empaquetado: usar paquetes wheel y, cuando sea necesario, imágenes de contenedor o PyInstaller.
Sintaxis del lenguaje
- Usar type hints: PEP 484, PEP 526.
- Formatear cadenas con f-strings: PEP 498.
- Usar objetos
datetimecon reconocimiento de zona horaria: PEP 615.
Diseño de aplicaciones
- Usar logging en lugar de
print(). - Usar el formato TOML para la configuración: PEP 680.
- Usar I/O asíncrona solo cuando sea necesario.
Bibliotecas
- Procesar la entrada de línea de comandos con argparse.
- Manejar rutas de archivos y directorios con pathlib.
- Usar
os.scandir()en lugar deos.listdir()por ser más rápido y eficiente: PEP 471. - Usar
subprocessal ejecutar comandos externos: PEP 324. - Usar httpx en lugar de requests como cliente web.
Buenas prácticas de proyecto
- Usar el archivo
pyproject.toml: PEP 517, PEP 518, PEP 621, PEP 660. - Usar el layout
src: comparación entre el layout src y el layout plano. - Usar entornos virtuales para el desarrollo: se recomiendan venv, PDM, Hatch, Mise.
- Usar archivos de requisitos para instalar paquetes: usar pip-compile mediante pip-tools o uv.
Para más detalles, consulta el artículo completo.
.
.
Resumen de la discusión en Hacker News sobre Python Modern Practices
En la discusión de Hacker News sobre Python Modern Practices, los usuarios compartieron opiniones sobre diversas herramientas y metodologías:
- Recomendación de usar UV: usar UV es rápido y fácil, y además ofrece buen soporte cuando surgen problemas. by screye
- Mención de Rye: Rye permite fijar y descargar intérpretes de Python, y está prevista su integración con uv. by rat87
- Énfasis en la simplicidad de las herramientas actuales: con entornos de Mamba y pip básico no hay problemas, y no se siente necesidad de cambiar de herramientas. by helsinki
- Preferencia por herramientas básicas: con pip, venv y virtualenvwrapper se puede resolver la mayoría de los problemas. by throwadobe
- Defensa del uso de Pipenv: Pipenv se ha usado como una solución completa, y no está claro por qué no se usa más ampliamente. by routerl
- Problemas de Poetry: Poetry resultó decepcionante por problemas como no poder agregar identificadores de versión de commits de Git. by alisonatwork
- Conda y Mamba: Conda es mucho más potente para la gestión de dependencias, y Mamba es más rápido. by wanderingmind
- Problemas de packaging: los problemas de empaquetado en Python se deben en gran parte a razones sociales y seguirán existiendo. by jampekka
- Propuesta como alternativa a Pyenv: Mise es más rápido que Pyenv y también soporta proyectos de Node. by odie5533
- Modelos de Pydantic y dataclasses: los modelos de Pydantic tienen validación potente pero son lentos, mientras que las dataclasses son ligeras y eficientes. by martinky24
Para más detalles, consulta la discusión en Hacker News.
5 comentarios
No hay contenido sobre la reducción de peso de las bibliotecas.
Usar un env virtual de miniconda3 y eliminar las bibliotecas no utilizadas para distribuirlo de forma portable garantizó un mejor rendimiento en sistemas de procesamiento distribuido como yarn.
¿Por qué habría que usar pip-tools o uv? No veo ninguna base para afirmar que sean modernos o buenos.
Parece que existe el problema de que, con el comportamiento actual de pip, no se puede especificar la versión de compilación en la razón por la que se deben incluir hashes en los especificadores de dependencias (
dependency specifier) de pip. Una guía que solo enumera directrices sin ese contexto no parece muy convincente.¿Qué suelen usar principalmente??
Antes, trabajaba solo con
pip freeze; elegía únicamente bibliotecas compatibles con Windows/Linux y hasta ahora no he tenido problemas causados por cambios en la versión de parche. Aun así, ahora que ya conozco el problema entiendo la necesidad, pero por ahora planeo considerar usarpip-toolsouvcuando estén un poco más maduros.