Importation arbitraire python fichier source. (Python 3.3,+)

Comment puis-je importer un python arbitraire fichier source (dont le nom de fichier peut contenir n'importe quel caractère, et ne se termine toujours par .py) dans Python 3.3,+?

J'ai utilisé imp.load_module comme suit:

>>> import imp
>>> path = '/tmp/a-b.txt'
>>> with open(path, 'U') as f:
...     mod = imp.load_module('a_b', f, path, ('.py', 'U', imp.PY_SOURCE))
...
>>> mod
<module 'a_b' from '/tmp/a-b.txt'>

Il travaille toujours en Python 3.3, mais selon imp.load_module de la documentation, il est obsolète:

Obsolète depuis la version 3.3: Inutiles comme les chargeurs devraient être utilisés pour
les modules de charge et find_module() est obsolète.

et imp documentation du module recommande d'utiliser importlib:

Note les Nouveaux programmes devraient utiliser importlib plutôt que de ce module.

Quelle est la bonne façon de charger un python arbitraire fichier source en Python 3.3+ sans l'aide de l'obsolète imp.load_module fonction?

  • Puis-je vous demander pourquoi vous faites cela? Je suis le responsable de importlib et j'ai essayé d'obtenir des réponses de gens pourquoi ils utilisent imp.load_module() sur une droite instruction import. Attendez-vous à importer le module par le nom plus tard (p. ex. import a_b)? Craignez-vous que tous les importateurs ne sont pas utilisés dans cette approche? Pensez-vous que le module complet (par exemple, définir __name__ et __loader__)?
  • Un programme tiers régulièrement (une fois par heure) modifier un fichier texte qui contient des instructions python (principalement THIS='blah' comme des lignes). Le nom de fichier n'est pas terminé avec .py. Mon programme de lecture de fichier.
  • Je ne suis pas au courant de la coutume, les importateurs. Je n'aime pas le module complet.
  • OIE à l'aide de Python comme vraiment simple structure de données de format. Merci pour l'info!
  • Pourriez-vous expliquer pourquoi?
  • Je viens de tomber sur un cas où j'ai besoin d'importer du code Python dans un répertoire qui a été nommé comme un numéro de version (par exemple, "v1.0.2"). Tout est possible, il serait malvenu de renommer le répertoire. Je me suis retrouvé à l'aide de stefan-scherfke la solution ci-dessous.
  • Connexes: stackoverflow.com/questions/2601047/...

InformationsquelleAutor falsetru | 2013-09-25