Import von beliebigen python-Quellcode-Datei. (Python 3.3+)

Wie kann ich importieren eine beliebige python-source-Datei (deren Dateiname könnte beliebige Zeichen enthalten, und nicht immer endet mit .py) in Python 3.3+?

Ich verwendet imp.load_module wie folgt:

>>> 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'>

Es funktioniert immer noch in Python 3.3, aber nach imp.load_module Dokumentation, es ist veraltet:

Veraltet seit version 3.3: nicht Benötigte als Lader verwendet werden sollte, um
Module laden und find_module() ist veraltet.

sowie imp Modul-Dokumentation empfiehlt importlib:

Hinweis Neue Programme verwenden sollten importlib anstatt dieses Moduls.

Was ist der richtige Weg, um laden eines beliebigen python-source-Datei in Python 3.3+ ohne Verwendung des veralteten imp.load_module Funktion?

  • Darf ich Fragen, warum Sie dies tun? Ich bin der maintainer von importlib und ich habe versucht, Antworten zu bekommen von Leuten, warum Sie verwenden imp.load_module() über eine gerade import-Anweisung. Erwarten Sie das Modul importieren von Namen zu einem späteren Zeitpunkt (z.B. import a_b)? Haben Sie Sorge, dass alle benutzerdefinierten Importeure nicht verwendet werden in diesem Ansatz? Erwarten Sie, dass die Modul-full-featured (z.B. definieren __name__ und __loader__)?
  • Ein Drittanbieter-Programm regelmäßig (einmal pro Stunde) zu ändern, eine text-Datei, die enthält die python-Anweisungen (vor allem THIS='blah' wie Linien). Der name der Datei ist nicht zu Ende ist mit .py. Mein Programm diese Datei Lesen,.
  • Ich bin mir nicht bewusst, benutzerdefinierte Importeure. I don ' T care, das Modul mit vollem Funktionsumfang.
  • IOW mit Python als eine wirklich einfache Datenstruktur-format. Danke für die info!
  • Können Sie erklären, warum?
  • Ich lief nur in einem Fall, wo ich brauchte, um zu importieren, einige Python-code in ein Verzeichnis, das benannt wurde, als eine Versionsnummer (z.B. "v1.0.2"). Obwohl es möglich ist, wäre es höchst unerwünscht, um das Verzeichnis umbenennen. Ich aufgewickelt mit stefan-scherfke Lösung unten.
  • Verwandte: stackoverflow.com/questions/2601047/...

InformationsquelleAutor falsetru | 2013-09-25
Schreibe einen Kommentar