Поскольку мой пакет должен быть совместим с Python 2.7, я использую комментарии для информации о типе:
Код: Выделить всё
def __init__(self, s):
# type: (Text) -> None
Код: Выделить всё
from typing import Text, IO, BinaryIO, Union
- Это не будет работать на Python 3.5.0 и 3.5.1. поскольку у него есть модуль ввода, но он не включает текст. Установка [][2] из PyPI не решает эту проблему. (И есть пользователи, которые запускают пакет на этой версии Python).
Код: Выделить всё
typing - Это делает мой пакет зависимым от [][2] для установок 2.7/3.3/3.4, требующих дополнительных загрузок и установок.
Код: Выделить всё
typing - У меня есть свой Union< /code> определены типы:
код для этого должен выполняться условно в зависимости от того, доступен ли ввод или нет.
Код: Выделить всё
StreamType = Union[BinaryIO, IO[str], StringIO] StreamTextType = Union[Text, StreamType]
Код: Выделить всё
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
Третья проблема может быть решить, попробовав-
Код: Выделить всё
exceptЕсть ли переменная среды, установленная при запуске mypy, которую я могу протестировать, чтобы оператор импорта выполнялся только при запуске mypy?
Тестирование переменной среды также позволило бы мне поместить определения моих собственных типов в эту «защищенную».
Или какое-то другое решение?
[1]: https://github.com/python/typeshed
[2]: https://pypi.python.org/pypi/typing
Подробнее здесь: https://stackoverflow.com/questions/435 ... ing-module
Мобильная версия