Есть ли способ установить только заглушки (типы) и ничего больше из пакета pypi?Python

Программы на Python
Ответить
Anonymous
 Есть ли способ установить только заглушки (типы) и ничего больше из пакета pypi?

Сообщение Anonymous »

Цель

Я использую mypy для проверки типа моего кода.
Локально это работает нормально, если запустить mypy --install-types один раз при установке. Он устанавливает, например. scipy-stubs, потому что заглушки находятся в дополнительном пакете. Больше ничего не устанавливается. Я предполагаю, что это связано с тем, что все зависимости уже установлены внутри моей виртуальной среды.
В CI я также хочу выполнить быструю проверку типов и, таким образом, установить только те части пакета, которые необходимы для проверки типов. Поскольку это докер-контейнер, который заново настраивается при каждом запуске, я бы не хотел устанавливать полные пакеты.
Как установить только типы пакета pypi?

Исследование: typeshed

Благодаря усилиям проекта typeshed можно установить типы-... для многих проектов, например типы-запросы:

Код: Выделить всё

pip install types-requests
Однако мне никогда не приходилось этого делать, я предполагаю, потому что mypy уже включает в себя заглушки стандартной библиотеки для typeshed:

Mypy использует файлы-заглушки, хранящиеся в репозитории typeshed, для определения типов функций, классов и других определений стандартной библиотеки и сторонних библиотек.

Сторонние пакеты

Не все пакеты содержатся в typeshed. Для популярных пакетов обычно существуют пакеты-заглушки, см., например. Как я могу получить файлы-заглушки для `matplotlib`, `numpy`, `scipy`, `pandas` и т. д.?.
Существуют pandas-stubs или scipy-stubs, которые представляют собой отдельные модули, как описано здесь. Я также нашел numpy.typing как отдельный модуль, который можно установить. С другой стороны, matplotlib.typing — это отдельный модуль, который недоступен при установке через pip. Более того, при проверке зависимостей кажется, что numpy.typing на самом деле зависит от полной установки numpy, в то время как, например, scipy-stubs он не зависит от Python:

Код: Выделить всё

$ uv tree
Resolved 10 packages in 1ms
tmpuv v0.1.0
├── numpy-typing v1.1.1
│   └── numpy v2.2.6
└── scipy-stubs v1.15.3.0
└── optype v0.9.3
└── typing-extensions v4.15.0
Существовали неофициальные репозитории ...-stubs (например, matplotlib-stubs, data-science-types), но они были заархивированы, как только сам проект добавил типизацию.

Спецификации PEP

Самый последний документ — «Распространение информации о типе», который является частью спецификации типизации Python.
Он основан на два замененных PEP, PEP 484 – Подсказки по типам, гл. Файлы-заглушки и [PEP 561 – Распространение и упаковка информации о типах] (PEP 561 – Распространение и упаковка информации о типах)
Глава Информация о типах в библиотеках emtnions три способа распространения типов:
  • Сопровождающий пакета хотел бы добавить информацию о типе в строке.
  • Сопроводитель пакета хотел бы добавить информацию о типе через заглушки.
  • Сторонняя сторона или сопровождающий пакета хотели бы поделиться файлами-заглушками для пакета.
В ней говорится, что Эта спецификация направлена на поддержку всех трех сценариев и упрощение их добавления в упаковку и развертывание, однако позже это изменится на:

Для сопровождающих пакетов, желающих отправлять файлы-заглушки, содержащие все их типы информации, желательно, чтобы заглушки *.pyi находились рядом с соответствующими файлами *.py. Однако заглушки также можно вынести в отдельный пакет и распространять отдельно.

Мои выводы/предположения

Похоже, во-первых 3. подход используется для многих пакетов. Затем numpy и matplotlib перешли на подход 1., а scipy и pandas перешли на подход 2., а спецификация поощряет подход 1. В проекте typeshed также используется подход 3.
Для меня это означает, что установка отдельных типов возможна только в рамках 2 и 3 описанных выше подходов и полностью зависит от решения сопровождающих, когда они решат использовать типизацию. Кроме того, в будущем все меньше и меньше пакетов будут иметь отдельные заглушки, а это будет означать, что то, что я хочу сделать, в общем случае невозможно.
Кто-то все же нашел решение? Я мог себе представить, что можно будет извлечь типы из пакета. Или есть совершенно другой способ решить мою «проблему Y», то есть быстро выполнить проверку типов в CI.

Подробнее здесь: https://stackoverflow.com/questions/798 ... pi-package
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»