2026, Jan 13 03:02

TypeError TyperArgument.make_metavar в Typer 0.15.3: как быстро исправить

TypeError TyperArgument.make_metavar в Typer 0.15.3 вызван несовместимостью с Click. Обновите Typer до 0.16.0+, чтобы исправить ошибку. Подробности в статье.

Запуск минимальной CLI на Typer на современных версиях Python может неожиданно завершаться с ошибкой TypeError с упоминанием TyperArgument.make_metavar. Если у вас установлен Typer 0.15.3, скорее всего, вместо ожидаемой справки вы видите именно это.

Как воспроизвести проблему

Этой минимальной конфигурации и скрипта достаточно, чтобы вызвать ошибку.

[project]
name = 'typer-example'
version = '0.1.0'
description = 'Add your description here'
readme = 'README.md'
requires-python = '>=3.13'
dependencies = [
    'typer>=0.15.3',
]
import typer as ty

def cli_handler(user: str):
    print(f'Hello, {user}!')

ty.run(cli_handler)
uv run python main.py
TypeError: TyperArgument.make_metavar() takes 1 positional argument but 2 were given

Что происходит на самом деле

Ошибка вызвана несовместимостью между Typer и Click, о которой сообщили в сообществе и которую позже исправили мейнтенеры Typer. Исправление вошло в релиз Typer v0.16.0.

Как исправить

Рекомендация проста: обновите Typer или зафиксируйте версию на 0.16.0 или новее. После этого минимальная CLI больше не падает с TypeError.

[project]
name = 'typer-example'
version = '0.1.0'
description = 'Add your description here'
readme = 'README.md'
requires-python = '>=3.13'
dependencies = [
    'typer>=0.16.0',
]

Код приложения менять не нужно: тот же минимальный скрипт корректно работает после обновления Typer.

import typer as ty

def cli_handler(user: str):
    print(f'Hello, {user}!')

ty.run(cli_handler)

Почему это важно

Для CLI-инструментов на Typer и Click совместимость версий библиотек напрямую влияет на поведение во время выполнения. Даже небольшой рассинхрон может проявиться как TypeError в самой простой программе. Использование Typer 0.16.0 и новее помогает избежать именно этой проблемы.

Выводы

Если в базовой CLI на Typer вы сталкиваетесь с TypeError TyperArgument.make_metavar, обновите Typer или зафиксируйте версию на 0.16.0 и выше. Это устраняет несовместимость и возвращает ожидаемое поведение без каких‑либо изменений в вашем коде.