À côté de ncoghlan, je suis l'autre responsable du système d'importation de Python et l'auteur de son implémentation actuelle, importlib (http://docs.python.org/dev/py3k/library/importlib.html). Tout ce que Nick a dit, je suis d’accord avec, alors je veux juste ajouter quelques informations supplémentaires.
Premièrement, ne vous fiez pas trop à PEP 302 directement, mais plutôt à ce que importlib fournit en termes de classes de base abstraites, etc. Pour des raisons de compatibilité ascendante, les choses devaient être compatibles avec PEP 302, mais je devais ajouter certains de mes propres API afin de finir de compléter le support pour une véritable flexibilité.
Un autre point important est que vous accordez aux développeurs deux éléments de flexibilité. L'un est la possibilité de stocker le code autrement que directement sur le système de fichiers sous forme de fichiers individuels (j'appelle cela le back-end de stockage pour les importations), par exemple, cela permet au code de vivre dans un fichier zip, une base de données sqlite, etc. L’autre support consiste à permettre au contrôle de pré-ou post-traiter le code d’une certaine manière, par exemple Quixote (https://www.mems-exchange.org/software/quixote/) et son utilisation alternative de littéraux chaîne non affectés à une variable serait beaucoup plus facile à supporter.
Bien que ce dernier soit rarement nécessaire, vous devez vous soucier du soutien dans le premier cas. Et c'est là que vous vous retrouvez pratiquement en train de redéfinir les API d'interaction de système de fichiers. Étant donné que certaines personnes ont besoin d'actifs stockés sous forme de fichiers avec leur code, vous devez fournir un bon moyen de lire des fichiers, de découvrir des fichiers, etc. Nous devons toujours implémenter la partie de l'API permettant de découvrir quels fichiers de données sont disponibles, de les lister, etc. .
Mais vous avez également besoin d’API spécifiques au code. Comme Nick l'a mentionné, vous avez finalement besoin d'API pour découvrir les modules qu'un paquet contient, etc., qui ne sont pas spécifiques à un fichier. Il existe cette étrange dualité de disposer d'API pour traiter des modules dans lesquels vous avez extrait le concept de fichiers, mais vous devez alors fournir des API pour accéder à des données d'actif de type fichier. Et dès que vous essayez d'implémenter l'un par rapport à l'autre pour éviter les doublons, les eaux deviennent vraiment troubles (les utilisateurs finissent par se fier à la structuration attendue du chemin des fichiers, etc. sans prêter attention au fait que le chemin peut ne pas être un vrai chemin. parce qu’il s’agit d’un fichier zip contenant du code et pas seulement un fichier). IOW, vous finirez par devoir mettre en œuvre deux API similaires, mais vous en bénéficierez mieux à long terme.
Comme Nick l'a dit, notre solution est un bon point de départ, mais ce n'est pas ce que je ferais aujourd'hui si je concevais l'API à partir de zéro.