[PYTHON] N'omettez pas __init__.py

Beaucoup de gens sont prêts à omettre «__init __. Py» de Python 3.3, mais ** ne le font pas. ** **

Pourquoi le malentendu s'est produit

À partir de Python 3.3, le package d'espace de noms implicite a été ajouté à PEP 420.

** Le package d'espace de noms n'est pas un package normal. ** C'est un objectif spécial, et pour la plupart des gens ** vous n'avez même pas besoin de savoir **.

Si vous voulez vraiment savoir, lisez la PEP 420 ci-dessus et le guide d'emballage.

L'effet néfaste de l'omission de «__init __. Py»

L'utilisation abusive du package d'espace de noms implicite avec un package normal est nuisible.

l'importation est lente

Comme il est différent d'un package normal, l'importation peut être lente à trouver des modules dans le package. De plus, bien que la probabilité soit faible, il peut y avoir des problèmes dus à la différence dans l'ordre de recherche.

L'outil ne prend pas en charge

Par exemple, la fonction qui recherche automatiquement un module de test avec unittest dans la bibliothèque standard ne recherche pas dans un répertoire qui n'a pas «__init __. Py». (Voir https://bugs.python.org/issue29642)

** Si vous essayez de faire cela, vous devrez rechercher récursivement tous les répertoires qui n'ont pas __init __. Py. Ce répertoire est node_modules et peut contenir des centaines de milliers de fichiers et de répertoires. À quel point serait-il lent si le répertoire était monté sur le réseau? ** **

De tels ralentissements sont tout simplement inacceptables pour les utilisateurs qui abusent du package d'espace de noms implicite en tant que package normal **. ** **

Pour la même raison, ne vous attendez pas à ce que des outils comme lint aient la capacité de rechercher automatiquement des packages et des modules pour rechercher des packages d'espace de noms implicites.

Il peut y avoir des outils qui acceptent et répondent aux demandes sans connaître le contexte, mais qui n'envoient pas de problèmes ou d'extraction de demandes qui disent "devrait répondre" ou "répondre" parce que c'est ennuyeux pour les responsables et les autres utilisateurs. ..

Recommended Posts

N'omettez pas __init__.py
Ne changez pas avec pyenv global!
[Matplotlib] N'inclinez pas l'étiquette de l'axe