web-dev-qa-db-fra.com

erreur: Sauter l'analyse de 'flask_mysqldb': module trouvé mais aucun indice de type ou stubs de bibliothèque

J'utilise python 3.6 et flask. J'ai utilisé flask-mysqldb pour me connecter à mysql. Mais chaque fois que j'essaie d'exécuter mypy sur mon programme, j'obtiens cette erreur: Sauter l'analyse de 'flask_mysqldb': module trouvé mais pas d'indices de type ou de stub de bibliothèque.J'ai essayé d'exécuter mypy avec les indicateurs ignore-missing-importations ou follow-importations = skip. Ensuite, je n'obtenais pas l'erreur. Pourquoi est-ce que j'obtiens cette erreur? Comment puis-je résoudre ce problème sans en ajouter drapeaux supplémentaires?

2
rsev4292340

Vous obtenez cette erreur car mypy n'est pas conçu pour essayer de vérifier le type de chaque module que vous essayez d'importer. Ceci est principalement pour trois raisons:

  1. Le module que vous essayez d'importer peut être écrit de manière à ne pas taper check. Par exemple, si le module fait quelque chose comme my_list = [] dans la portée globale, mypy demandera un indice de type car il ne sait pas ce que cette liste est censée contenir.

    Ces types d'erreurs sont hors du contrôle des personnes utilisant les bibliothèques, et il serait donc ennuyeux et perturbant de les spammer partout.

  2. Même si le module de bibliothèque que vous essayez d'importer proprement des vérifications de type, s'il n'utilise pas d'indices de type, vous ne gagnerez pas beaucoup à essayer de l'utiliser avec mypy. Si la bibliothèque est typée dynamiquement, mypy pourrait accepter silencieusement du code qui ne saisit pas réellement check lors de l'exécution.

    Cela peut surprendre les gens/faire la mauvaise chose en silence est généralement une mauvaise idée. Au lieu de cela, vous obtenez un avertissement explicite.

  3. Tous les modules ne sont pas écrits en Python - certains modules sont en fait des extensions C. Mypy ne peut pas analyser ces modules et doit donc implémenter un mécanisme pour ignorer les modules.

Si vous n'obtenez pas cette erreur, cela signifie l'une des cinq choses suivantes:

  1. Les indices de type pour votre bibliothèque existent déjà dans Typeshed , qui est pré-fourni avec mypy. Typeshed contient principalement des indices de type pour la bibliothèque standard et une poignée de bibliothèques tierces populaires.

  2. La bibliothèque utilise déjà des indices de type et a déclaré qu'elle souhaitait être analysée et vérifiée par mypy. Cela se fait en incluant un py.typed fichier dans le package qui le rend compatible PEP 561 .

  3. Vous avez installé un package tiers "stubs uniquement". Ce package peut être installé à côté de la bibliothèque et permet aux utilisateurs de fournir des indications de type sans avoir à modifier la bibliothèque elle-même. Par exemple, le paquet Django-stubs contient des indices de type pour la bibliothèque Django, qui n'est pas compatible avec PEP 561.

  4. Vous avez configuré mypy pour utiliser vos propres stubs personnalisés. Autrement dit, vous avez essentiellement créé votre propre paquetage local "stubs-only" et dit à mypy de l'utiliser.

  5. Vous avez décidé de supprimer l'erreur et de vivre avec le fait que la bibliothèque est typée dynamiquement pour le moment - par exemple, en utilisant les indicateurs de ligne de commande que vous avez trouvés ou en ajoutant un # type: ignore à l'importation.

Pour plus de détails sur la façon de traiter cette erreur, consultez le mypy docs sur la gestion des indices de type manquants dans les bibliothèques tierces .

4
Michael0x2a