Подсказки типов Python с дополнительными зависимостямиPython

Программы на Python
Anonymous
Подсказки типов Python с дополнительными зависимостями

Сообщение Anonymous »

Я пишу несколько заглушек типов Python для пакета и столкнулся с функцией, которая может принимать либо список, либо, если доступен numpy, numpy.ndarray. Если присутствует numpy и функции присвоен numpy.ndarray, она преобразует массив в список, прежде чем продолжить работу с остальной частью функции, но если numpy отсутствует, раздел, обрабатывающий массив, пропускается. Вот пример этого:

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

def foo(bar):
try:
import numpy as np
except ImportError:
np = None

if (np is not None) and isinstance(bar, np.ndarray):
bar = bar.tolist()

bar.append(0)

return bar
Проблема, с которой я столкнулся, заключается в том, как включить np.ndarray в подсказку типа для bar без строгого требования присутствия numpy, когда включена проверка типа. Я могу сделать следующее, чтобы сохранить numpy необязательным в время выполнения:

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

import typing as ty

if ty.TYPE_CHECKING:
import numpy as np

def foo(bar: list | np.ndarray[tuple[int]]) -> list:
try:
import numpy as np
except ImportError:
np = None

if (np is not None) and isinstance(bar, np.ndarray):
bar = bar.tolist()

bar.append(0)

return bar
Однако это по-прежнему вызывает следующую ошибку в mypy, если он не может найти numpy:

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

Cannot find implementation or library stub for module named "numpy" Mypy(import-not-found) [Ln 4, Col 1]
Можно ли избежать этой ошибки, даже если numpy не установлен? Очевидно, что установка numpy исключительно для целей набора текста не представляет большого труда, но если бы в подобных ситуациях было значительно больше дополнительных зависимостей, было бы несколько неудобно/неэффективно устанавливать все дополнительные зависимости для удовлетворения mypy, не используя при этом ни одной из реальных функций пакетов. Я также не хочу полностью игнорировать ошибки, поскольку было бы легко скрыть законную проблему с отсутствующими заглушками типов в списке посторонних ошибок импорта mypy.


Подробнее здесь: https://stackoverflow.com/questions/798 ... pendencies

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