Добавление информации о типе без зависимости от модуля типизацииPython

Программы на Python
Ответить
Anonymous
 Добавление информации о типе без зависимости от модуля типизации

Сообщение Anonymous »

Я добавлял информацию о типе в файлы .py моего пакета, чтобы обеспечить возможность запуска mypy в отношении пакета. Помимо прочего, позволяет генерировать информацию [typeshed][1] для этого стороннего пакета.
Поскольку мой пакет должен быть совместим с Python 2.7, я использую комментарии для информации о типе:

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

def __init__(self, s):
# type: (Text) -> None
но для запуска mypy мне необходимо импортировать набор текста:

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

from typing import Text, IO, BinaryIO, Union
это вызывает две проблемы:
  • Это не будет работать на Python 3.5.0 и 3.5.1. поскольку у него есть модуль ввода, но он не включает текст. Установка [][2] из PyPI не решает эту проблему. (И есть пользователи, которые запускают пакет на этой версии Python).
  • Это делает мой пакет зависимым от [][2] для установок 2.7/3.3/3.4, требующих дополнительных загрузок и установок.
  • У меня есть свой Union< /code> определены типы:

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

     StreamType = Union[BinaryIO, IO[str], StringIO]
    StreamTextType = Union[Text, StreamType]
    
    код для этого должен выполняться условно в зависимости от того, доступен ли ввод или нет.
Для первой проблемы, поскольку я не запускаю mypy под Python 3.5.0/1, я могу сделать что-то вроде:

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

import sys
if sys.version_info < (3, 5, 0) and sys.version_info >= (3, 5, 2):
from typing import Text, IO, BinaryIO, Union
но это не решает вторую проблему.
Комментирование импорта, как и информация о типе, содержащаяся в комментариях,

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

# from typing import Text, IO, BinaryIO, Union
приведет к тому, что mypy выдаст ошибку. Имя «Текст» не определено.
Третья проблема может быть решить, попробовав- (некрасиво и, возможно, неэффективно) или, например. путем тестирования переменной среды (которая также может быть использована для решения первой проблемы).
Есть ли переменная среды, установленная при запуске mypy, которую я могу протестировать, чтобы оператор импорта выполнялся только при запуске mypy?
Тестирование переменной среды также позволило бы мне поместить определения моих собственных типов в эту «защищенную».
Или какое-то другое решение?
[1]: https://github.com/python/typeshed
[2]: https://pypi.python.org/pypi/typing

Подробнее здесь: https://stackoverflow.com/questions/435 ... ing-module
Ответить

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

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

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

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

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