[Bug] Python 3.9: tuple[str, str] несовместим с declared requires-python = ">=3.9"
#51
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Проблема
В
pyproject.tomlзаявлена поддержка Python>=3.9, но вredmine_reporter/cli.py:14используется аннотация:В Python 3.9 встроенные типы (
tuple,list,dictи т.д.) ещё не являются generic, поэтому при импорте модуля на чистом Python 3.9 произойдёт ошибка:Пример воспроизведения
Ожидаемый результат: импорт проходит без ошибок.
Фактический результат:
TypeError: 'type' object is not subscriptableна строке 14cli.py.Рекомендации
Выбрать один из вариантов:
Перенести нижнюю границу на Python 3.9 (предпочтительно, если нужна совместимость):
Или добавить
from __future__ import annotationsв начало файла.Поднять
requires-pythonдо>=3.10— проще, но ломает обещание в README/pyproject.toml.Связанные места
redmine_reporter/cli.py:14pyproject.toml:20Дополнение к списку мест: PEP 604-аннотации (
X | None), ломающие Python 3.9, есть не только вcli.py:14(tuple[str, str]), но и в:redmine_reporter/config.py:239-241:redmine_reporter/yaml_config.py:33(path: Path | None = None),:110(output_arg: str | None),:118(-> str | None)from __future__ import annotationsв этих файлах нет, поэтому на чистом Python 3.9 импорт пакета падает уже на этих модулях, а не только наcli.py.Отдельное соображение в пользу варианта «поднять
requires-pythonдо>=3.10»: Python 3.9 достиг EOL в октябре 2025 и больше не получает security-фиксы. Для внутреннего инструмента поддержка EOL-версии вряд ли оправдана — проще и честнее поднять границу (и поправить classifiers/README), чем поддерживать совместимость с 3.9.