MetsuOS

Construyendo la plena inclusión a través del videojuego

El pyproject.toml - todos los campos (incluso los menos conocidos) 🟡③

El pyproject.toml - todos los campos (incluso los menos conocidos)

Curso sobre desarrollo de un gestor de paquetes python que use poetry como backend 🟡③

Inicialización de un Proyecto Python desde Cero con Poetry

Si estás empezando un proyecto en Python y quieres usar Poetry como gestor de dependencias, no hace falta complicarse con comandos manuales uno a uno. En su lugar, he preparado un script sencillo en Python, llamado inicializar.py, que automatiza todo el proceso. Este script parte de un entorno Python 3.11 o superior con pip instalado (que viene de serie con Python). Primero, comprueba si Poetry está disponible; si no, lo instala automáticamente mediante pip. Luego, crea el proyecto en el directorio actual con poetry new ., genera la estructura básica y un fichero pyproject.toml preconfigurado. Por último, instala las dependencias iniciales y verifica que todo esté en orden.

Para ponerlo en marcha:
1. Crea un directorio vacío para tu proyecto (por ejemplo, mkdir mi_proyecto && cd mi_proyecto).
2. Crea el fichero init_metsudepmanager.py en ese directorio con el código que te detallo a continuación.
3. Ejecuta el script: python init_metsudepmanager.py.

El script gestiona errores habituales, y utiliza subprocess para ejecutar comandos de manera segura. Aquí va el código completo:

# Comentarios para humanos

# Este script inicializa un entorno de desarrollo para MetsuDepManager basado en Poetry.

# Su función principal es:

# - Verificar si Poetry está instalado en el sistema.

# - Si no lo está, instalarlo automáticamente usando el método oficial recomendado (instalador vía curl) con fallback a pip.

# - Detectar si ya existe un proyecto Poetry (pyproject.toml) en el directorio actual.

# - Si existe: ejecutar 'poetry install' para instalar todas las dependencias y crear/actualizar el entorno virtual.

# - Si no existe: inicializar un nuevo proyecto Poetry de forma NO interactiva usando 'poetry init --no-interaction'.

# Esto crea un pyproject.toml básico con valores por defecto (nombre basado en el directorio, versión 0.1.0, etc.).

# - Añadir temporalmente ~/.local/bin al PATH si es necesario (para que Poetry sea accesible en la misma sesión).

# - Proporcionar mensajes claros al usuario sobre cada paso realizado.

# El script está diseñado para ser ejecutado una sola vez al clonar o crear el proyecto MetsuDepManager,

# pero puede volver a ejecutarse sin problemas para reinstalar dependencias.

# Compatible con macOS, Linux y Windows (WSL o nativo con Python instalado).

# Autor: Raul Carrillo aka metsuke <metsuke@gmail.com>

# Fecha de última actualización: enero 2026.

# Corrección reciente: Se cambió a modo no interactivo en 'poetry init' para evitar que el script se cuelgue esperando input del usuario.



# Documentación

# Uso:

# python init_metsudepmanager.py

# Requisitos previos:

# - Python 3.8 o superior instalado y accesible en PATH.

# - Conexión a internet la primera vez (para descargar e instalar Poetry si no está presente).

# Flujo del script:

# 1. Verifica si 'poetry' está disponible en PATH.

# 2. Si no → intenta instalar vía instalador oficial (curl).

# 3. Si falla el instalador oficial → fallback a 'pip install --user poetry'.

# 4. Añade ~/.local/bin al PATH de la sesión actual si es necesario.

# 5. Si existe pyproject.toml → ejecuta 'poetry install'.

# 6. Si no existe → ejecuta 'poetry init --no-interaction' para crear un pyproject.toml básico automáticamente.

# 7. Informa al usuario de los siguientes pasos recomendados (poetry shell, poetry add, etc.).

# Notas:

# - El script no modifica archivos existentes ni fuerza opciones; respeta el estado actual del proyecto.

# - En caso de error crítico (imposible instalar Poetry), termina con código de salida 1 y mensaje claro.

# - El modo no interactivo usa valores por defecto; puedes editar pyproject.toml manualmente después.

# Autor: Raul Carrillo aka metsuke <metsuke@gmail.com>



# Comentarios para IA

# Estado actual del código (enero 2026):

# - Instalación de Poetry: método principal vía instalador oficial curl (recomendado por python-poetry.org).

# - Fallback robusto a pip install --user poetry.

# - Detección automática de PATH y añadido temporal para la sesión actual.

# - Lógica diferenciada: install existente vs. init nuevo proyecto.

# - Uso de shutil.which para detección fiable de Poetry.

# - Manejo de errores detallado con mensajes claros para el usuario.

# - No se añaden dependencias iniciales automáticas (para respetar libertad del usuario).

# - Compatible con entornos restringidos (sin sudo necesario gracias a --user).

# - Cambio clave: 'poetry init --no-interaction' para evitar hanging en subprocess.run() cuando se espera input interactivo.

# - Autor añadido explícitamente como "Raul Carrillo aka metsuke <metsuke@gmail.com>" en comentarios para humanos y documentación.

# Todo alineado con mejores prácticas actuales de Poetry en 2026.



# Exigencias Generales a la IA

# - Debes generar y mantener varios bloque de comentarios varios en la cabecera del fichero, como comentario de comentarios para humanos, otro de documentacion, otro con comentarios para IA en la que tu te apuntes lo que necesites para futuros trabajos con el script, y las dos secciones de Exigencias a la IA, la general (generica de programación) y la especifica del script que estamos trabajando.

# - Siempre actualiza el contenido de los comentarios para humanos e IA en cada revisión del script, manten intacta el área de Exigencias a IA.

# - No modifiques nada del script que no te hayan pedido explícitamente sin consultarlo primero.

# ---

# Exigencias especificas del script para la IA



import subprocess

import sys

import os

import shutil



def run_command(cmd, check=True):

"""Ejecuta un comando en la shell y maneja errores de forma amigable."""

try:

result = subprocess.run(cmd, check=check, text=True, capture_output=True)

if result.stdout:

print(result.stdout)

return True

except subprocess.CalledProcessError as e:

print(f"Error ejecutando {' '.join(cmd)}:")

if e.stderr:

print(e.stderr)

return False

except FileNotFoundError:

print(f"Comando no encontrado: {cmd[0]}. Verifica que esté instalado y en PATH.")

return False



def is_poetry_installed():

"""Comprueba si Poetry está disponible en el sistema."""

return shutil.which("poetry") is not None



def install_poetry():

"""Instala Poetry usando el método oficial recomendado (2026)."""

print("Poetry no detectado. Instalándolo mediante el instalador oficial...")

# Método principal: instalador oficial vía curl

install_cmd = ["curl", "-sSL", "https://install.python-poetry.org", "|", sys.executable, "-"]

if run_command(install_cmd):

print("Instalación oficial completada.")

else:

print("Fallback: instalando Poetry vía pip...")

if not run_command([sys.executable, "-m", "pip", "install", "--user", "poetry"]):

print("No se pudo instalar Poetry automáticamente.")

return False

# Añadir ~/.local/bin al PATH de esta sesión si es necesario

poetry_path = os.path.expanduser("~/.local/bin")

if poetry_path not in os.environ.get("PATH", ""):

os.environ["PATH"] += os.pathsep + poetry_path

print(f"Añadido {poetry_path} al PATH de esta sesión.")

return True



def main():

print("=== Inicializador de MetsuDepManager con Poetry ===\n")

if not is_poetry_installed():

if not install_poetry():

print("\nNo se pudo instalar Poetry. Instálalo manualmente desde:")

print("https://python-poetry.org/docs/#installation")

sys.exit(1)

# Verificar nuevamente tras instalación

if not is_poetry_installed():

print("Poetry instalado pero no detectable en PATH. Reinicia la terminal o añade ~/.local/bin al PATH.")

sys.exit(1)

print("Poetry está disponible y listo para usar.\n")

if os.path.exists("pyproject.toml"):

print("Proyecto Poetry existente detectado (pyproject.toml encontrado).")

print("Instalando dependencias...\n")

run_command(["poetry", "install"])

else:

print("No se encontró pyproject.toml. Inicializando nuevo proyecto Poetry de forma automática (no interactiva)...\n")

run_command(["poetry", "init", "--no-interaction"])

print("\npyproject.toml creado con valores por defecto.")

print("Edítalo manualmente si necesitas cambiar nombre, versión, autor, etc.")

print("Luego ejecuta 'poetry install' para crear el entorno virtual.")

print("\n¡MetsuDepManager inicializado correctamente!")

print("Pasos recomendados:")

print(" • poetry shell → activar el entorno virtual")

print(" • poetry add <paquete> → añadir nuevas dependencias")

print(" • poetry run python tu_script.py → ejecutar scripts en el entorno")



if __name__ == "__main__":

main()

Explicación breve del script (sin entrar en detalles manuales)

Con esto, tienes el proyecto listo en un santiamén. Ahora, vamos a profundizar en el fichero pyproject.toml, explicando todos sus campos de forma detallada pero accesible.

El pyproject.toml: Todos los Campos (Incluso los Menos Conocidos)

El fichero pyproject.toml es el núcleo de cualquier proyecto Python moderno. Sustituye a los antiguos setup.py, setup.cfg o requirements.txt, y sigue el estándar PEP 518 para definir el sistema de construcción, metadatos y dependencias en un formato TOML claro y declarativo. En el mundo de Poetry (y, por extensión, en MetsuDepManager), amplía estos estándares con la sección [tool.poetry], ofreciendo un control preciso sobre dependencias, scripts y extras, mientras deja el trabajo pesado a poetry-core.

Poetry da prioridad a la sección [project] (compatible con PEP 621) para metadatos estáticos, pero conserva [tool.poetry] para opciones heredadas o avanzadas. Los campos dinámicos (indicados con dynamic = [...]) permiten calcular valores en tiempo de ejecución, como la versión desde un tag de Git. Entre los campos menos habituales, destacan las configuraciones para puntos de entrada personalizados, dependencias condicionales o plugins de construcción.

Voy a estructurarlo por secciones principales, con una descripción del propósito (incluyendo su uso en el curso), el tipo de dato, si es obligatorio, un ejemplo realista y notas sobre comportamientos especiales, depreciaciones o consejos prácticos para MetsuDepManager.

1. [build-system] – Configuración del Sistema de Construcción (PEP 517/518)

Esta sección es esencial para construcciones independientes y define el backend (Poetry usa poetry-core para evitar ciclos de dependencias).

2. [project] – Metadatos del Proyecto (PEP 621)

Esta es la sección principal para metadatos estáticos. Poetry la prefiere para compatibilidad con herramientas como pip o twine.

3. [tool.poetry] – Configuración Específica de Poetry

Amplía [project] con características propias de Poetry. Muchos campos están depreciados en favor de [project], pero se mantienen por compatibilidad. En MetsuDepManager, se usa para delegar a poetry-core sin telemetría.

4. Otras Secciones Menos Conocidas o Extendidas

Consideraciones Finales y Mejores Prácticas

Referencias Bibliográficas que Apoyan

Estas fuentes respaldan el uso de Poetry y la estructura de pyproject.toml, con énfasis en su eficiencia y estándares PEP. He verificado su existencia, vigencia (actuales a 2025) y relevancia científica mediante búsquedas en web y documentación oficial.

  1. Documentación oficial de Poetry sobre pyproject.toml 🟡③🌐 .- Documentación oficial que explica la estructura y campos del archivo pyproject.toml en Poetry, incluyendo secciones project y tool.poetry, requisitos y compatibilidad con estándares PEP.
  2. PEP 517 – A build-system independent format for source trees 🟡③🌐 .- Propuesta que define un formato independiente para sistemas de construcción en árboles de fuente Python, utilizando pyproject.toml y hooks para herramientas como pip.
  3. PEP 518 – Specifying Minimum Build System Requirements 🟡③🌐 .- Especificación para declarar requisitos mínimos de sistemas de construcción en proyectos Python mediante pyproject.toml, facilitando la instalación de dependencias de build.
  4. PEP 621 – Storing project metadata in pyproject.toml 🟡③🌐 .- Estándar para almacenar metadatos de proyectos como nombre, versión y dependencias en pyproject.toml de manera estática y consistente.
  5. Tutorial de Real Python sobre Dependency Management with Poetry 🟡③🌐 .- Guía práctica sobre el uso de Poetry para manejar dependencias en Python, cubriendo instalación, configuración de pyproject.toml, entornos virtuales y mejores prácticas.
  6. Vídeo en YouTube: Gestión de dependencias en Python con Poetry 🟡③🌐 .- Video tutorial en español sobre optimización de procesos de trabajo y gestión de dependencias en Python usando Poetry, por Garaje de ideas | Tech.
  7. Vídeo en YouTube: Cómo Gestionar Tus Proyectos De Python Con Poetry 🟡③🌐 .- Video explicativo en español sobre gestión de proyectos Python con Poetry, enfocándose en buenas prácticas de desarrollo, por deployr.

Referencias Bibliográficas que Refutan

Estas fuentes destacan críticas a Poetry, como lentitud en resolución de dependencias, problemas de compatibilidad o preferencia por alternativas más rápidas como UV o PDM. He confirmado su validez y vigencia (2023-2025) mediante búsquedas.

One More Thing

Un escenario de retrocomputación del siglo 24

¡Desbloquea el poder de MetsuOS y descubre que la privacidad y la seguridad son la clave para desencadenar tu verdadero potencial en línea!

Contenido registrado en Safe Creative

Logo Safe Creative
¡Usa el código de promocional 7ZYM4Z y ahorrate unos eurillos en tu suscripcion de Safe Creative!

MetsuOS Needs You!

Apoyanos en este proyecto difundiendolo en tus redes, o mejor, haznos una donación a la cuenta paypal para poder dedicar más tiempo y recursos a el. No olvides comentarnos que parete te interesa más junto con tu donación.

En este momento, además de mantener los servicios, estoy centrado en crear la siguiente iteración del software que me permite hacer todo esto y creando una biblioteca personal física para poder contrastar contenido.

Sobre el sistema de validez de un contenido en MetsuOS

Empezando a incorporar los niveles de validación de un contenido (también llamada sabiduría o niveles de conocimiento) ⚫🔴 🟡 🟢 🔵⚪ ¿Qué són?

Sobre la categorización de los tipos de conocimiento

La Metsukeología (de Metsuke vision global y logos conocimiento) es la ciencia que estudia el conocimiento como un conjunto potencial de conocimiento del que podemos obtener, procesar o percibir partes concretas dentro de un marco contextual específico, y cuyo contexto general real está muy por encima de lo que somos capaces, como especie, de percibir, procesar e integrar de forma completa (definición en progreso).

La Metsucología (de Metsu aniquilación - en este contexto en forma de colapso - , logos conocimiento) es la ciencia que estudia como extraemos verdades percibidas - colapsadas - como conocimiento desde nuestra perspectiva real (tanto epistemológico como gnoseológico) al tomar una parte específica del conocimiento metsukeológico potencial enmarcado en un contexto concreto, obligando a colapsar el conocimiento potencial en conocimiento específico (definición en progreso).

Mas sobre el contexto

DISCLAIMER: Mi consideración de anticientífico respecto al consenso científico es una hipotesis de trabajo propia, que supone que toda asignación de validez, incluso aquella derivada de la conclusión por acumulación de evidencia NO debe ser supeditada a debate, ni acuerdo, debe ser algo probabilistico sin intervención del ego humano. Podría estar equivocado y, en este punto, es donde se aplicaría entonces ese mismo consenso que ahora considero no valido (incluso dañino)

Existen indicadores para algunas cuestiones adicoinales como los siguientes:

Cuando hablamos de un contenido que incluye un texto que hace referencia a otro.

También aplicaremos el Sistema de fiabilidad de fuentes y credibilidad de contenidos de la OTAN 🔴②, este sistema incluye una valoración de la fiabilidad de la fuente de A a F (siendo A la de mayor fiabilidad) y una varloración de credibilidad del contenido de 1 a 6 (siendo 1 la mayor credibilidad).

En MetsuOS la agregaremos al final uniendo amos valores como si fuera una coordenada. Por ejemplo: ⚫①-D4 o 🟡③-B2. Esto ayudarña a contextualizar la información sobre la solidez del conocimiento al que se hace referencia en cada momento.

Hay que tener en cuenta que, cuando hay elementos subjetivos o parcialmente subjetivos, el punto de referencia seré yo mismo. Quizá más adelante pueda objetivizar esto más (seria lo deseable), pero en tanto no tenga herramientas que me lo permitan, debo ceñirme al principio de honestidar intelectual, y esperar que mis sesgos dañen lo menos posible la información (en parte este es el nudo gordiano que pretendo resolver, y por ello es dificil resolverlo a priori).

Así de forma resumida, podríamos decir que esta definición es nivel 🔴② (Rojo2 xD) ¿Crees que me dejo algo? Si es así por favor ayudame a mejorarlo contactándome a través de X (Twitter) en mi cuenta, @metsuke 🌐

Consulta la versión completa de la descripcion en ⚫🔴🟡🟢🔵⚪ (🔴②) Un poco más de detalle