Gridens - информационные технологии

ошибка: пропуск анализа 'flask_mysqldb': найден модуль, но нет подсказок типа или библиотечных заглушек

Я использую Python 3.6 и flask. Я использовал flask-mysqldb для подключения к MySQL, но всякий раз, когда я пытаюсь запустить mypy в своей программе, я получаю эту ошибку:

Пропуская анализ 'flask_mysqldb': модуль найден, но нет подсказок типа или заглушек библиотек.

Я попытался запустить mypy с флагами ignore-missing-imports или follow-imports=skip. Тогда я не получал ошибку. Почему я получаю эту ошибку? Как я могу исправить это, не добавляя никаких дополнительных флагов?

17.03.2020

  • Вы можете поместить дополнительные флаги в файл mypy.ini, чтобы вам не приходилось вводить их вручную, или написать файл-заглушку типа для пакета flask_mysqldb и указать mypy на этот файл-заглушку (либо через переменную среды MYPY_PATH, либо через настройку mypy_path в конфиге mypy.ini). 17.03.2020

Ответы:


1

Вы получаете эту ошибку, потому что mypy не предназначен для проверки типов каждого отдельного модуля, который вы пытаетесь импортировать. В основном это происходит по трем причинам:

  1. Модуль, который вы пытаетесь импортировать, может быть написан таким образом, что он не может проверить тип. Например, если модуль делает что-то вроде my_list = [] в глобальной области видимости, mypy запросит подсказку типа, поскольку он не знает, что должен содержать этот список.

    Такого рода ошибки находятся вне контроля людей, использующих библиотеки, поэтому было бы раздражающе и разрушительно рассылать их повсюду.

  2. Даже если библиотечный модуль, который вы пытаетесь импортировать, проверяет типы правильно, если он не использует подсказки типов, вы не получите большой выгоды от попытки использовать его с mypy. Если библиотека динамически типизирована, mypy может молча принимать код, который на самом деле не проверяет тип во время выполнения.

    Это может удивить людей / молча делать неправильные вещи, как правило, плохая идея. Вместо этого вы получите явное предупреждение.

  3. Не все модули написаны на Python — некоторые модули на самом деле являются расширениями C. Mypy не может анализировать эти модули и поэтому должен реализовать какой-то механизм для игнорирования модулей.

Если вы не получаете эту ошибку, это означает одно из пяти:

  1. Подсказки типов для вашей библиотеки уже существуют в Typeshed, который поставляется вместе с mypy. Typeshed в основном содержит подсказки типов для стандартной библиотеки и несколько популярных сторонних библиотек.

  2. Библиотека уже использует подсказки типов и объявила, что хочет, чтобы mypy анализировала и проверяла типы. Это делается путем включения в пакет специального py.typed файла, который делает его совместимым с PEP 561.

  3. Вы установили сторонний пакет «только для заглушек». Этот пакет может быть установлен вместе с библиотекой и позволяет людям предоставлять подсказки типов без необходимости изменять саму библиотеку. Например, пакет django-stubs содержит подсказки типов для библиотеки Django, которая не является PEP. 561 совместимый.

  4. Вы настроили mypy на использование собственных пользовательских заглушек. То есть вы в основном создали свой собственный локальный пакет «только для заглушек» и сказали mypy использовать его.

  5. Вы решили подавить ошибку и жить с тем фактом, что библиотека пока динамически типизирована — например, с помощью найденных вами флагов командной строки или добавления # type: ignore к импорту.

Дополнительные сведения о том, как справиться с этой ошибкой, см. в документация mypy по работе с отсутствующими подсказками типа из сторонних библиотек.

18.03.2020
Новые материалы

Журналы Py № 2: Если, Элиф, Иначе?
У меня такое чувство, будто я давно ничего не писал, хотя прошло два дня с тех пор, как я опубликовал свою первую историю. В любом случае, сегодня произошло много всего, так что приступим...

Работа в Реакции
Я изучаю React в Bloc прямо сейчас. До сих пор я изо всех сил пытался понять темы. Тем не менее, я только что закончил проблему, над которой некоторое время размышлял, и хочу записать свой..

Нужен ли банкам искусственный интеллект, чтобы кардинально изменить свою работу?
Почему необходимо использовать искусственный интеллект в банковской сфере? Существенное использование многочисленных инноваций ИИ, таких как машинное обучение , глубокое обучение и..

Какую последнюю статью вы считаете стоящей поделиться?
Я люблю читать качественные статьи. Не стесняйтесь делиться своей работой.

Преобразование CoreML, позволяющее использовать Fast-Neural-Style-Transfer на iOS и MacOS.
Как использовать Fast-Neural-Style-Transfer на iOS Преобразованная модель: GitHub — john-rocky/CoreML-Models: Преобразованный зоопарк моделей CoreML...

ИИ в правоохранительных органах: мощный инструмент с двойной природой
Искусственный интеллект (ИИ) революционизирует правоохранительную деятельность, предлагая инновационные тактики расследования, повышая достоверность доказательств и оптимизируя процессы. Тем..

Autoencoder Average Distance  — классический способ, используемый внутри Microsoft для выявления сходства…
Среднее расстояние автоэнкодера (AAD) использует более простой подход для определения расстояния между двумя наборами данных. Нейронный автоэнкодер может преобразовать любой элемент данных в..