2017-01-30 1 views
1

En utilisant importlib, quelle est la différence entre « Finder Meta Path » (trouvé en traversant sur sys.meta_path) et le chemin d'entrée Finder »(trouvé en parcourant plus sys.path_hooks)?Comment utiliser importlib pour importer des modules à partir de sources arbitraires?

Le premier type est appelé à commencer Je veux implémenter une importation personnalisée, où un module peut être importé à partir de sources autres que * .py ou * .pyc, par ex. à partir d'un flux, comment cela peut-il être fait?

Répondre

2

sys.path_hooks returns a finder factory

crochets de chemin sont appelés dans le cadre de sys.path (ou package.__path__) traitement

comme nous le lisons dans PEP 302 relevant part que vous devriez lire à faire ce que vous voulez.

En venant à proprement parler, nous utilisons un custom hook dans mon code, mais je ne vous recommande de le copier mot pour mot (je ne suis vraiment pas sûr de la mystification que nous faisons avec les fichiers INIT)

Cependant, le processus est un peu comme là-dedans - la méthode find_module renvoie self ou None selon ce que vous voulez accepter en tant que module et la méthode load_module procède au chargement en compilant le code et en lui attribuant une entrée dans sys.modules. En remplaçant ces pièces, vous pouvez charger à peu près tout ce que vous voulez.

connexes:

+0

Je continue et une question plus précise: http://stackoverflow.com/questions/41990169/how-is-python-sys -path-hooks-used-correctement-pour-custom-loading-of-modules – michael