¡Explicación exhaustiva de opciones de línea de comandos en Python! Diferencias y uso de argparse, Click y Typer [Para principiantes]

目次

1. Introducción

Python es un lenguaje de programación flexible y potente que es utilizado por muchos desarrolladores. Entre sus características, al aprovechar las opciones de línea de comandos, se puede mejorar la operatividad de scripts o aplicaciones.

En este artículo, explicaremos exhaustivamente cómo manejar opciones de línea de comandos en Python. Específicamente, introduciremos tres: la biblioteca estándar argparse, y las bibliotecas externas Click y Typer, y también explicaremos sus diferencias y cómo elegir entre ellas.

2. ¿Qué son las opciones de línea de comandos de Python?

Al usar opciones de línea de comandos en Python, puedes pasar argumentos durante la ejecución del script para controlar su comportamiento. Por ejemplo, consideremos un script como el siguiente.

python script.py --name Alice --age 25

De esta manera, al utilizar argumentos de opciones, los usuarios pueden personalizar el comportamiento del script.

2.1 ¿Por qué es necesario el análisis de opciones?

Al crear scripts en Python, también puedes recibir entrada desde la entrada estándar, pero al aprovechar las opciones de línea de comandos, puedes proporcionar una interfaz de usuario flexible e intuitiva. Hay ventajas como las siguientes.

  • Mejora la versatilidad del script (se puede ejecutar con diferentes parámetros)
  • Posible interactuar con el usuario sin crear una GUI (adecuado para operaciones en terminal)
  • Posible cambiar el comportamiento sin archivos de configuración

Python tiene varias bibliotecas para analizar opciones de línea de comandos de diferentes maneras. Entre ellas, las tres más importantes son las siguientes.

2.2 argparseClickTyper Comparación

Hay varias formas de analizar opciones de línea de comandos en Python, pero he resumido las representativas en una tabla.

BibliotecaCaracterísticasFacilidad de usoUsos recomendados
argparseBiblioteca estándar de Python y herramienta integradaMedioScripts de pequeña a mediana escala
ClickIntuitivo y permite crear comandos fácilmenteAltoAplicaciones CLI a gran escala
TyperAprovecha las sugerencias de tipo para manejar Click de manera más pythonicaAltoDiseño de API y procesamiento de datos

3. Cómo manejar opciones de línea de comandos en Python

Hay varias formas de analizar opciones de línea de comandos en Python, pero las bibliotecas representativas sonargparse (biblioteca estándar), Click (biblioteca externa), Typer (compatible con hints de tipo).

Aquí, explicaremos las características y el uso básico de cada biblioteca.

3.1 argparse : Método de implementación con la biblioteca estándar

argparse es una biblioteca incluida de forma estándar en Python, por lo que se puede usar sin instalación adicional. Permite el análisis básico de argumentos y la generación automática de mensajes de ayuda.

Características principales de argparse

  • Como es la biblioteca estándar de Python, no requiere instalación adicional
  • Es posible configurar fácilmente argumentos obligatorios y argumentos opcionales
  • Genera automáticamente mensajes de ayuda

Ejemplo de uso

El siguiente código es un script simple que usa argparse para recibir y mostrar un argumento de opción llamado --name|.

import argparse

# Creación del objeto ArgumentParser
parser = argparse.ArgumentParser(description="Ejemplo de argumentos de línea de comandos en Python")

# Agregar opción de línea de comandos
parser.add_argument("--name", type=str, required=True, help="Especifique el nombre")

# Analizar argumentos
args = parser.parse_args()

# Mostrar resultado
print(f"¡Hola, {args.name}!")

Ejemplo de ejecución

python script.py --name Alice

Salida

¡Hola, Alice!

De esta manera, usando la argparse estándar de Python, se pueden procesar fácilmente los argumentos de opción.

3.2 Click : Método de descripción más conciso

Click es una biblioteca que utiliza decoradores para describir opciones de línea de comandos de manera intuitiva. Se puede implementar el mismo procesamiento con código más conciso que argparse|.

Instalación de Click

Click es una biblioteca externa, por lo que es necesario instalarla previamente.

pip install click

Ejemplo de uso

El siguiente es un ejemplo de procesamiento de la opción --name utilizando Click|.

import click

@click.command()
@click.option("--name", prompt="¿Cuál es tu nombre?", help="Especifique el nombre")
def greet(name):
    click.echo(f"¡Hola, {name}!")

if __name__ == "__main__":
    greet()

Ejemplo de ejecución

python script.py

Salida

¿Cuál es tu nombre? Alice
¡Hola, Alice!

De esta manera, usando Click, también es posible recibir entrada del usuario utilizando prompts.

3.3 Typer : Descripción intuitiva utilizando hints de tipo

Typer es una biblioteca construida sobre la base de Click, y su característica es que utiliza hints de tipo de Python para una descripción más intuitiva.

Instalación de Typer

Typer también es una biblioteca externa, por lo que es necesario instalarla previamente.

pip install typer

Ejemplo de uso

El siguiente es un ejemplo de procesamiento de la opción --name utilizando Typer|.

import typer

app = typer.Typer()

@app.command()
def greet(name: str):
    print(f"¡Hola, {name}!")

if __name__ == "__main__":
    app()

Ejemplo de ejecución

python script.py greet --name Alice

Salida

¡Hola, Alice!

De esta manera, usando Typer, se pueden tratar los argumentos de la función directamente como opciones de línea de comandos, lo que permite escribir código más intuitivo.

Resumen

BibliotecaCaracterísticasUsosNecesidad de instalación
argparseBiblioteca estándar, no requiere instalación adicionalScripts pequeñosNo
ClickPosible describir de manera concisa utilizando decoradoresAplicaciones CLI a gran escala
TyperDescripción de código intuitiva utilizando hints de tipoDesarrollo de API o procesamiento de datos

4. [Python] Uso de argparse

La biblioteca estándar de Python, argparse, es una herramienta poderosa para analizar opciones de línea de comandos. En esta sección, explicamos en detalle desde el uso básico hasta las aplicaciones avanzadas de argparse.

4.1 ¿Qué es argparse?

argparse es una biblioteca incluida de forma estándar en Python y permite analizar fácilmente los argumentos al ejecutar un script. Es más concisa y legible que procesar directamente sys.argv, y también cuenta con funciones como la generación automática de mensajes de ayuda.

Características de argparse

  • Biblioteca estándar, por lo que no requiere instalación adicional
  • Fácil configuración de argumentos obligatorios y opcionales
  • Genera automáticamente mensajes de ayuda
  • Permite definir fácilmente argumentos de diferentes tipos de datos

4.2 Uso básico

Veamos primero el uso básico de argparse.

Ejemplo de análisis de argumentos simple

En el siguiente código, creamos un script que recibe el argumento de línea de comandos --name y muestra su valor.

import argparse

# Creación del objeto ArgumentParser
parser = argparse.ArgumentParser(description="Ejemplo de argumentos de línea de comandos en Python")

# Definición del argumento de línea de comandos
parser.add_argument("--name", type=str, required=True, help="Especifique el nombre")

# Análisis de los argumentos
args = parser.parse_args()

# Salida del resultado
print(f"¡Hola, {args.name}!")

Ejemplo de ejecución

python script.py --name Alice

Salida

¡Hola, Alice!

En este script, el argumento --name se establece como obligatorio, por lo que se producirá un error si no se proporciona.

4.3 Argumentos obligatorios y opcionales

Con argparse, se pueden definir dos tipos de argumentos: argumentos obligatorios (argumentos posicionales) y argumentos opcionales.

Argumentos obligatorios (argumentos posicionales)

Los argumentos posicionales son aquellos que se pasan sin especificar un nombre de opción particular.

parser.add_argument("name", type=str, help="Especifique el nombre")

Ejemplo de ejecución

python script.py Alice

Salida

¡Hola, Alice!

Argumentos opcionales

Los argumentos opcionales se pasan precedidos de -- o - y pueden especificarse de forma opcional.

parser.add_argument("--age", type=int, help="Especifique la edad")

Ejemplo de ejecución

python script.py --age 25

Salida

Edad: 25

4.4 Configuración de valores predeterminados

También es posible establecer un valor predeterminado en caso de que no se especifique el argumento.

parser.add_argument("--city", type=str, default="Tokio", help="Especifique la ciudad")

Ejemplo de ejecución (sin argumentos)

python script.py

Salida

Ciudad: Tokio

4.5 Recepción de múltiples argumentos

Al especificar nargs="+", es posible recibir múltiples valores en forma de lista.

parser.add_argument("--fruits", nargs="+", help="Especifique sus frutas favoritas")

Ejemplo de ejecución

python script.py --fruits apple banana orange

Salida

Frutas favoritas: ['apple', 'banana', 'orange']

4.6 Opciones de bandera (True/False)

Al usar store_true o store_false, se pueden definir opciones de bandera.

parser.add_argument("--verbose", action="store_true", help="Mostrar información detallada")

Ejemplo de ejecución

python script.py --verbose

Salida

Mostrar información detallada

4.7 Generación automática de mensajes de ayuda

Con argparse, al especificar -h o --help, se puede generar automáticamente un mensaje de ayuda.Ejemplo de ejecución

python script.py --help

Salida

usage: script.py [-h] --name NAME

Ejemplo de argumentos de línea de comandos en Python

optional arguments:
  -h, --help     show this help message and exit
  --name NAME    Especifique el nombre

Resumen

FunciónMétodo
Argumentos obligatorios (argumentos posicionales)parser.add_argument("name", type=str)
Argumentos opcionalesparser.add_argument("--age", type=int)
Configuración de valores predeterminadosparser.add_argument("--city", default="Tokio")
Recepción de múltiples argumentosparser.add_argument("--fruits", nargs="+")
Opciones de banderaparser.add_argument("--verbose", action="store_true")
Generación automática de ayudapython script.py --help
侍エンジニア塾

5. [Python] Uso de Click

La biblioteca externa de Python Click es una herramienta poderosa que permite crear interfaces de línea de comandos (CLI) de manera más simple e intuitiva que argparse. En esta sección, explicamos en detalle desde el uso básico de Click hasta ejemplos avanzados.

5.1 ¿Qué es Click?

Click (Command Line Interface Creation Kit) es una biblioteca para crear fácilmente herramientas CLI en Python. En comparación con argparse, cuenta con una sintaxis intuitiva basada en decoradores y es adecuada para gestionar múltiples subcomandos.

Características de Click

  • Sintaxis simple que aprovecha los decoradores
  • Posibilidad de crear fácilmente subcomandos con estructura anidada
  • Función de prompt (función para solicitar entrada) incluida de forma estándar
  • Generación automática de mensajes de ayuda

Al usar Click, es posible implementar CLI de manera más intuitiva y con código más corto.

5.2 Instalación de Click

Click no es parte de la biblioteca estándar, por lo que es necesario instalarla previamente.

pip install click

5.3 Uso básico de Click

Creemos una aplicación CLI simple usando Click. El siguiente código es un script que recibe la opción --name y muestra un saludo.

Script básico de Click

import click

@click.command()
@click.option("--name", prompt="¿Cuál es tu nombre?", help="Especifique el nombre")
def greet(name):
    click.echo(f"¡Hola, {name}!")

if __name__ == "__main__":
    greet()

Ejemplo de ejecución

python script.py

Salida

¿Cuál es tu nombre? Alice
¡Hola, Alice!

Puntos clave

  • @click.command() : Define la función como un comando CLI
  • @click.option("--name", prompt="¿Cuál es tu nombre?") : Define un argumento de opción y, si no se proporciona entrada, lo solicita mediante un prompt
  • click.echo() : Procesa la salida estándar de forma segura

De esta manera, con Click es posible crear CLI de forma más intuitiva que con argparse.

5.4 Argumentos obligatorios y argumentos de opción

Con Click, es fácil definir tanto argumentos posicionales (obligatorios) como argumentos de opción.

Definición de argumentos posicionales (obligatorios)

@click.command()
@click.argument("name")
def greet(name):
    click.echo(f"¡Hola, {name}!")

if __name__ == "__main__":
    greet()

Ejemplo de ejecución

python script.py Alice

Salida

¡Hola, Alice!

Definición de argumentos de opción

@click.command()
@click.option("--age", type=int, help="Especifique la edad")
def show_age(age):
    click.echo(f"Tu edad es {age} años.")

if __name__ == "__main__":
    show_age()

Ejemplo de ejecución

python script.py --age 25

Salida

Tu edad es 25 años.

5.5 Opciones de bandera (True/False)

Con Click, al establecer is_flag=True, es posible crear opciones de bandera para manejar valores booleanos.

Definición de opciones de bandera

@click.command()
@click.option("--verbose", is_flag=True, help="Mostrar información detallada")
def run(verbose):
    if verbose:
        click.echo("Ejecutando en modo detallado...")
    else:
        click.echo("Ejecutando en modo normal.")

if __name__ == "__main__":
    run()

Ejemplo de ejecución

python script.py --verbose

Salida

Ejecutando en modo detallado...

5.6 Aplicación CLI con múltiples opciones

Con Click, es fácil crear aplicaciones CLI con múltiples opciones.

Ejemplo que combina múltiples opciones

@click.command()
@click.option("--name", default="Invitado", help="Especifique el nombre")
@click.option("--count", default=1, type=int, help="Especifique el número de saludos")
def greet(name, count):
    for _ in range(count):
        click.echo(f"¡Hola, {name}!")

if __name__ == "__main__":
    greet()

Ejemplo de ejecución

python script.py --name Alice --count 3

Salida

¡Hola, Alice!
¡Hola, Alice!
¡Hola, Alice!

5.7 Implementación de subcomandos

Con Click, también es posible crear herramientas CLI con múltiples comandos.

CLI con subcomandos

@click.group()
def cli():
    pass

@cli.command()
def hello():
    click.echo("¡Hola!")

@cli.command()
def bye():
    click.echo("¡Adiós!")

if __name__ == "__main__":
    cli()

Ejemplo de ejecución

python script.py hello

Salida

¡Hola!

Al usar @click.group() de Click, es posible construir aplicaciones CLI con múltiples comandos.

Resumen

Funciones de ClickMétodo de descripción
Comando básico@click.command()
Argumento de opción@click.option("--name")
Argumento obligatorio@click.argument("name")
Opciones de bandera@click.option("--verbose", is_flag=True)
Subcomandos@click.group() utilizado

Al usar Click, el desarrollo de herramientas CLI en Python se vuelve más intuitivo que con argparse. En particular, la facilidad de manejo de funciones de prompt y subcomandos es uno de los grandes atractivos de Click.

6. [Python] Uso de Typer

La biblioteca externa de Python Typer es una biblioteca para la construcción de herramientas CLI basada en Click, y su característica es que permite una descripción más intuitiva aprovechando las type hints. En esta sección, explicamos en detalle desde el uso básico de Typer hasta sus funciones convenientes.

6.1 ¿Qué es Typer?

Typer es una biblioteca que aprovecha las type hints de Python para crear CLI más concisos y de alta legibilidad. Inherita las potentes funciones de Click mientras permite escribir código type-safe, lo que hace posible un desarrollo de CLI más pythonico.

Características de Typer

  • Aprovechando las type hints, es posible definir argumentos de manera intuitiva
  • Basado en Click, permite construir potentes herramientas CLI
  • Mejora la usabilidad de las funciones de autocompletado del IDE
  • Implementa fácilmente valores por defecto y validación con type hints
  • Biblioteca proporcionada por los desarrolladores de FastAPI

6.2 Instalación de Typer

Typer es una biblioteca externa, por lo que es necesario instalarla previamente.

pip install typer

6.3 Uso básico de Typer

Al usar Typer, es posible crear herramientas CLI fácilmente aprovechando las type hints. El siguiente código es un script que recibe la --name opción y muestra un saludo.

Script básico de Typer

import typer

app = typer.Typer()

@app.command()
def greet(name: str = "Invitado"):
    print(f"¡Hola, {name}!")

if __name__ == "__main__":
    app()

Ejemplo de ejecución

python script.py greet --name Alice

Salida

¡Hola, Alice!

Puntos clave

  • app = typer.Typer() : Crea el punto de entrada de la aplicación
  • @app.command() : Registra la función como un comando CLI
  • name: str = "Invitado" : Establece un valor por defecto aprovechando type hints
  • print() : Typer utiliza internamente click.echo(), por lo que print() también es seguro

6.4 Argumentos obligatorios y argumentos opcionales

En Typer, aprovechando las type hints, es posible definir fácilmente argumentos obligatorios (argumentos posicionales) y argumentos opcionales.

Definición de argumentos obligatorios (argumentos posicionales)

@app.command()
def greet(name: str):
    print(f"¡Hola, {name}!")

if __name__ == "__main__":
    app()

Ejemplo de ejecución

python script.py greet Alice

Salida

¡Hola, Alice!

Definición de argumentos opcionales

@app.command()
def show_age(age: int = typer.Option(..., help="Especifique la edad")):
    print(f"Tu edad es {age} años.")

if __name__ == "__main__":
    app()

Ejemplo de ejecución

python script.py show-age --age 25

Salida

Tu edad es 25 años.

Para argumentos opcionales, se utiliza typer.Option(...), y al agregar help="descripción", se genera automáticamente un mensaje de ayuda.

6.5 Opciones de bandera (True/False)

En Typer, al establecer is_flag=True, es posible crear opciones de bandera para manejar valores booleanos.

Definición de opciones de bandera

@app.command()
def run(verbose: bool = typer.Option(False, "--verbose", help="Mostrar información detallada")):
    if verbose:
        print("Ejecutando en modo detallado...")
    else:
        print("Ejecutando en modo normal.")

if __name__ == "__main__":
    app()

Ejemplo de ejecución

python script.py run --verbose

Salida

Ejecutando en modo detallado...

6.6 Aplicación CLI con múltiples opciones

Al usar Typer, es posible crear fácilmente aplicaciones CLI con múltiples opciones.

Ejemplo combinando múltiples opciones

@app.command()
def greet(name: str = "Invitado", count: int = 1):
    for _ in range(count):
        print(f"¡Hola, {name}!")

if __name__ == "__main__":
    app()

Ejemplo de ejecución

python script.py greet --name Alice --count 3

Salida

¡Hola, Alice!
¡Hola, Alice!
¡Hola, Alice!

6.7 Implementación de subcomandos

En Typer, también es posible crear herramientas CLI con múltiples comandos.

CLI con subcomandos

@app.command()
def hello():
    print("¡Hola!")

@app.command()
def bye():
    print("¡Adiós!")

if __name__ == "__main__":
    app()

Ejemplo de ejecución

python script.py hello

Salida

¡Hola!

En Typer, simplemente definiendo múltiples @app.command(), es posible implementar fácilmente la gestión de múltiples comandos.

Resumen

Funciones de TyperMétodo de descripción
Comando básico@app.command()
Argumento opcionaltyper.Option(...)
Argumento obligatorioname: str
Opción de banderatyper.Option(False, "--verbose", is_flag=True)
SubcomandosDefinir múltiples @app.command()

Al usar Typer, el desarrollo de herramientas CLI en Python se vuelve más intuitivo que con argparse o Click. En particular, el hecho de que es posible una descripción aprovechando las type hints es el gran atractivo de Typer.

7. ¿Qué biblioteca debería elegir?

Como métodos para analizar opciones de línea de comandos en Python, introdujimos tres: argparseClickTyper.
Cada biblioteca tiene características, y la opción adecuada varía según el proyecto que se utilice.

En esta sección, revisaremos las características de cada biblioteca y explicaremos cuál elegir.

7.1 argparseClickTyper Tabla de comparación

ÍtemargparseClickTyper
Biblioteca estándar✅ (No requiere instalación adicional)❌ (Requiere instalación)❌ (Requiere instalación)
Simplicidad de la descripción❌ (Algo verboso)✅ (Usa decoradores)✅ (Aprovecha las sugerencias de tipo)
Facilidad de manejo de argumentos de opciones◯ (Flexible pero algo complejo)✅ (Se puede definir de manera intuitiva)✅ (Se puede definir con sugerencias de tipo)
Generación automática de mensajes de ayuda✅ (Soporte estándar)✅ (Soporte estándar)✅ (Soporte estándar)
Facilidad de manejo de subcomandos❌ (Algo complejo)✅ (Se puede definir fácilmente)✅ (Se puede definir de manera intuitiva)
Función de prompt (entrada de usuario)❌ (No compatible de forma estándar)✅ (Soporte estándar)✅ (Soporte estándar)
Soporte para sugerencias de tipo❌ (Ninguno)❌ (Ninguno)✅ (Disponible)
Usos adecuadosScripts pequeñosHerramientas CLI de mediano a gran escalaHerramientas CLI seguras en tipos

7.2 Bibliotecas recomendadas según el uso

✅ Para scripts pequeños, argparse

  • Biblioteca estándar de Python, por lo que no requiere instalación adicional
  • Permite crear herramientas CLI simples rápidamente
  • Se pueden controlar opciones e argumentos de manera detallada
  • Ejemplo: Scripts simples de análisis de logs, herramientas de procesamiento por lotes

✅ Si desea crear herramientas CLI de manera intuitiva, Click

  • Aprovecha los decoradores para una descripción intuitiva
  • Permite agregar subcomandos y opciones de bandera fácilmente
  • La función de prompt (click.prompt()) está equipada de forma estándar
  • Ejemplo: Aplicaciones que funcionan en la terminal, scripts de procesamiento de datos

✅ Si desea escribir código seguro en tipos y de alta legibilidad, Typer

  • Aprovecha las sugerencias de tipo para mejorar la función de autocompletado del IDE
  • Basado en Click, permite construir CLI potentes fácilmente
  • Alta legibilidad del código, donde la definición de funciones se convierte directamente en la especificación de CLI
  • Ejemplo: Herramientas para análisis de datos, CLI de modelos de aprendizaje automático, CLI para desarrollo de API

7.3 Criterios de selección de cada biblioteca

CondiciónBiblioteca óptima
Desea completarlo solo con la biblioteca estándarargparse
Desea crear CLI con código cortoClick
Desea aprovechar sugerencias de tipo para mejorar la legibilidad del códigoTyper
Desea crear un script simpleargparse
Desea aceptar entrada de usuario intuitiva sin GUIClick o Typer
Desea desarrollar una aplicación CLI a gran escalaClick o Typer

7.4 Ejemplos reales de selección de argparseClickTyper

Escenario de usoBiblioteca adecuadaUso específico
Agregar argumentos simples a un scriptargparseScripts de procesamiento de archivos, procesamiento por lotes
Crear una aplicación CLI simpleClickHerramientas de gestión de archivos, herramientas de conversión de datos
Desarrollar CLI seguro en tiposTyperAnálisis de datos, herramientas de aprendizaje automático
Desarrollar una herramienta con múltiples subcomandosClick o TyperAplicaciones CLI como Git
Se necesita prompt (formulario de entrada)ClickHerramientas que solicitan entrada de usuario
Desea crear CLI aprovechando sugerencias de tipoTyperHerramientas de comandos para API

7.5 Conclusión: ¿Cuál debería elegir?

Su objetivoBiblioteca recomendada
Desea completarlo solo con funciones estándar de Pythonargparse
Desea crear CLI de manera intuitiva con código cortoClick
Desea escribir código de alta legibilidad aprovechando sugerencias de tipoTyper
Se necesita entrada de usuario (prompt)Click
Desea crear una aplicación CLI con muchos subcomandosClick o Typer

Cada biblioteca tiene ventajas y desventajas, y es importante seleccionar la adecuada según el uso.

Resumen

  • argparse es una biblioteca estándar de Python y es adecuada para scripts pequeños
  • Click aprovecha los decoradores para facilitar la escritura y es adecuada para herramientas CLI a gran escala
  • Typer aprovecha las sugerencias de tipo para crear CLI intuitivas y seguras en tipos
  • Es importante seleccionar la biblioteca adecuada según la escala del proyecto y las funciones requeridas

8. FAQ (Preguntas frecuentes)

Sobre las bibliotecas de opciones de línea de comandos de Python(argparseClickTyper)hemos recopilado preguntas frecuentes. Complementa el contenido anterior y explica en detalle los puntos que pueden generar dudas al usarlo.

8.1 argparse y optparse ¿Cuál es la diferencia?

Q:argparse y optparse ¿Cuál es la diferencia? ¿Cuál debería usarse?A:

  • optparse es una biblioteca que se utilizó en la era de Python 2 y, a partir de Python 3.2, está obsoleta.
  • argparse es el sucesor de optparse y permite un análisis de opciones más flexible.
  • Actualmente se recomienda usar argparse.

Ejemplo:En argparse, es fácil personalizar valores predeterminados, subcomandos y mensajes de ayuda.

import argparse

parser = argparse.ArgumentParser(description="script de ejemplo")
parser.add_argument("--name", type=str, help="Especifique el nombre")
args = parser.parse_args()
print(f"¡Hola, {args.name}!")

8.2 Click y Typer ¿Cuál deberías elegir?

Q:Click o Typer, ¿cuál debería elegir?A:

  • Click es ideal para el desarrollo de herramientas CLI generales y permite crear aplicaciones CLI fácilmente utilizando la sintaxis de decoradores propia de Click.
  • Typer se basa en Click y su fortaleza es poder utilizar hints de tipo. Es adecuado para casos en los que se desea escribir código con seguridad de tipos o aprovechar las funciones de autocompletado del IDE.
BibliotecaUso adecuado
ClickDesarrollo de herramientas CLI generales. Casos con muchas opciones o uso de subcomandos
TyperCasos en los que se desea utilizar hints de tipo para escribir código de alta legibilidad

8.3 ¿Debería usar Click o Typer incluso en scripts pequeños?

Q:¿Debería usar Click o Typer incluso en scripts pequeños? ¿Es argparse insuficiente?A:

  • Para scripts simples, argparse es suficiente. Como es una biblioteca estándar, no requiere instalación adicional y se puede implementar fácilmente.
  • Sin embargo, si las opciones aumentan y se vuelve complejo, considere Click o Typer.

Criterios de selección

Escala del scriptBiblioteca óptima
Script simple (1-3 opciones)argparse
Script de mediana escala (5 o más opciones)Click
Desea crear un script con seguridad de tiposTyper

8.4 ¿Cómo crear subcomandos con argparse?

Q:¿Cómo crear subcomandos como git usando argparse?A:En argparse, puedes crear subcomandos utilizando subparsers.

Ejemplo: Creación de una herramienta CLI similar a git

import argparse

parser = argparse.ArgumentParser(description="Ejemplo de subcomandos")
subparsers = parser.add_subparsers(dest="command")

# Comando hello
hello_parser = subparsers.add_parser("hello", help="Saludar")
hello_parser.add_argument("name", type=str, help="Especifique el nombre")

# Ejecución
args = parser.parse_args()
if args.command == "hello":
    print(f"¡Hola, {args.name}!")

Ejemplo de ejecución

python script.py hello Alice

Salida

¡Hola, Alice!

Si se utilizan muchos subcomandos, Click es más intuitivo, así que elige según la situación.

8.5 ¿Cuáles son los beneficios de usar Typer?

Q:¿Cuál es el mayor beneficio de usar Typer?A:El mayor beneficio de Typer es poder aprovechar los hints de tipo.

  • En argparse y Click es necesario especificar explícitamente el tipo de opción, pero Typer puede usar directamente los hints de tipo de Python, lo que simplifica el código.
  • Se refuerza la función de autocompletado del IDE, mejorando la eficiencia de desarrollo.

Ejemplo:Explotación de hints de tipo con Typer

import typer

app = typer.Typer()

@app.command()
def greet(name: str):
    print(f"¡Hola, {name}!")

if __name__ == "__main__":
    app()

En este código, al especificar la pista de tipo name: str, la opción CLI se verifica automáticamente.

Resumen

  • argparse es una biblioteca estándar adecuada para scripts CLI simples.
  • Click utiliza decoradores para facilitar la escritura y es adecuada para herramientas CLI a gran escala.
  • Typer utiliza hints de tipo para un desarrollo CLI de alta legibilidad.

¡Seleccione la biblioteca adecuada y desarrolle herramientas CLI más eficientes!