Empaquetado de Python
Una opinión 'controvertida'
Usar `setup.py` para empaquetar y distribuir tus paquetes de python puede ser bastante desafiante de vez en cuando. Herramientas modernas como Poetry y UV no solo hacen que el empaquetado sea **mucho más fácil**, sino que también te ayudan a gestionar tus dependencias de una manera muy conveniente. UV es particularmente notable por ser entre 10 y 100 veces más rápido que las herramientas tradicionales.
Si deseas más información sobre Poetry, puedes leer los siguientes artículos:
- Proyectos de Python con Poetry y VSCode. Parte 1
- Proyectos de Python con Poetry y VSCode. Parte 2
- Proyectos de Python con Poetry y VSCode. Parte 3
Para una guía completa sobre UV, el gestor de paquetes de Python ultrarrápido, lee: UV: El gestor de paquetes de Python ultrarrápido.
Introducción
El empaquetado de Python es el proceso de preparar tu proyecto de Python para su distribución e instalación. Hay dos enfoques principales: el método tradicional de setup.py y el enfoque moderno de pyproject.toml (definido en PEP-517, PEP-518 y PEP-660).
Para una guía completa sobre el manejo de rutas de archivos y directorios, lo cual es esencial para gestionar estructuras de proyectos, consulta la página de Rutas de Archivos y Directorios.
Enfoque Tradicional: setup.py
El archivo setup.py está en el corazón de un proyecto tradicional de Python. Describe todos los metadatos sobre tu proyecto. Hay bastantes campos que puedes añadir a un proyecto para darle un rico conjunto de metadatos que describen el proyecto. Sin embargo, solo hay tres campos obligatorios: name, version y packages. El campo name debe ser único si deseas publicar tu paquete en el Python Package Index (PyPI). El campo version realiza un seguimiento de las diferentes versiones del proyecto. El campo packages describe dónde has puesto el código fuente de Python dentro de tu proyecto.
Esto te permite instalar fácilmente paquetes de Python. A menudo es suficiente escribir:
python setup.py install
y el módulo se instalará a sí mismo.
Ejemplo: setup.py
Nuestro setup.py inicial también incluirá información sobre la licencia y reutilizará el archivo README.txt para el campo long_description. Esto se verá así:
# setup.py: define metadatos del paquete para distribución
from distutils.core import setup
setup(
name='pythonCheatsheet', # Nombre del paquete (debe ser único en PyPI)
version='0.1', # Número de versión
packages=['pipenv',], # Lista de paquetes a incluir
license='MIT', # Tipo de licencia
long_description=open('README.txt').read(), # Leer descripción desde el archivo
)
Inicia sesión para responder este quiz y rastrear tu progreso de aprendizaje
setup.py?Enfoque Moderno: pyproject.toml
El archivo pyproject.toml es el estándar moderno para la configuración de proyectos de Python (PEP-517, PEP-518, PEP-660). Proporciona una forma unificada de especificar los requisitos del sistema de compilación y los metadatos del proyecto en un único formato de archivo declarativo.
Beneficios de pyproject.toml
- Declarativo: Todos los metadatos del proyecto en un solo lugar
- Agnóstico al sistema de compilación: Funciona con setuptools, poetry, flit y otros backends de compilación
- Sin ejecución de código: Más seguro y predecible que setup.py
- Estandarizado: Sigue los estándares PEP para un mejor soporte de herramientas
Ejemplo: pyproject.toml
Aquí hay un ejemplo básico de pyproject.toml usando setuptools:
[build-system]
requires = ["setuptools>=61.0", "wheel"]
build-backend = "setuptools.build_meta"
[project]
name = "pythonCheatsheet"
version = "0.1"
description = "A Python cheatsheet package"
readme = "README.txt"
requires-python = ">=3.8"
license = {text = "MIT"}
authors = [
{name = "Your Name", email = "your.email@example.com"}
]
classifiers = [
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
]
[project.optional-dependencies]
dev = [
"pytest>=7.0",
"black>=22.0",
]
Instalación desde pyproject.toml
Con pyproject.toml, puedes instalar tu paquete usando pip:
pip install .
O en modo editable:
pip install -e .
Inicia sesión para responder este quiz y rastrear tu progreso de aprendizaje
pyproject.toml sobre setup.py?Elegir el Enfoque Correcto
- Usar
setup.py: Si estás trabajando con proyectos heredados o necesitas un control detallado - Usar
pyproject.toml: Para proyectos nuevos (recomendado), ya que es el estándar moderno y proporciona un mejor soporte de herramientas
Encuentra más información visitando la documentación oficial.