Ich arbeite an einer (persönlichen) Dokumentation für eine verschachtelte Matplotlib (MPL) -Bibliothek, die sich von der von MPL selbst bereitgestellten durch interessierte Submodul-Pakete unterscheidet. Ich schreibe ein Python-Skript, von dem ich hoffe, dass es die Dokumentgenerierung aus zukünftigen MPL-Versionen automatisiert.
Ich habe interessierte Submodule / Pakete ausgewählt und möchte deren Hauptklassen auflisten, aus denen ich eine Liste erstellen und verarbeiten werdepydoc
Das Problem ist, dass ich keine Möglichkeit finde, Python anzuweisen, das Submodul aus dem String zu laden. Hier ist ein Beispiel für das, was ich versucht habe:
import matplotlib.text as text
x = dir(text)
.
i = __import__('matplotlib.text')
y = dir(i)
.
j = __import__('matplotlib')
z = dir(j)
Und hier ist ein 3-Wege-Vergleich der obigen Listen durch pprint:
Ich verstehe nicht, was in das y
Objekt geladen ist - es ist Basis matplotlib
plus etwas anderes, aber es fehlen Informationen, die ich wollte, und das sind Hauptklassen aus dem matplotlib.text
Paket. Es ist der oberste blau gefärbte Teil auf dem Screenshot ( x
Liste)
Bitte schlagen Sie Sphinx nicht als anderen Ansatz vor.
quelle
__import__(str)
anstelle des Standardstatements verwendenimport
müssen?import
Anweisung nicht ganz funktioniert . Hier ist ein Anwendungsbeispiel: djangosnippets.org/snippets/3048Antworten:
Die
__import__
Funktion kann etwas schwer zu verstehen sein.Wenn Sie sich ändern
zu
dann
i
wird auf verweisenmatplotlib.text
.In Python 2.7 und Python 3.1 oder höher können Sie Folgendes verwenden
importlib
:Einige Notizen
Wenn Sie versuchen, etwas aus einem Unterordner zu importieren,
./feature/email.py
sieht der Code beispielsweise so ausimportlib.import_module("feature.email")
Sie können nichts importieren, wenn sich
__init__.py
in dem Ordner mit der Datei, die Sie importieren möchten, keine befindetquelle
importlib
sollte auf pypi für <python2.7./feature/email.py
), der Code wie folgt aussiehtimportlib.import_module("feature.email")
__init__.py
in dem Ordner mit der Datei, die Sie importieren möchten, keine befindet .import moduleName
moduleName als Zeichenfolge. Wie wäre esfrom moduleName import *
?importlib.import_module
ist das, wonach Sie suchen. Es gibt das importierte Modul zurück. (Nur für Python> = 2.7 oder 3.x verfügbar):Sie können danach auf alles im Modul zugreifen
mymodule.myclass
, usw.quelle
imp.load_source(..)
Verwendung desimp
Moduls, wie in dieser Antwort vorgeschlagen. Stackoverflow.com/questions/67631/…import moduleName
moduleName als Zeichenfolge. Wie wäre esfrom moduleName import *
?Ich habe einige Zeit damit verbracht, Module aus einer Liste zu importieren, und dies ist der Thread, der mich den größten Teil des Weges dorthin gebracht hat - aber ich habe die Verwendung von ___import____ nicht verstanden -
Hier erfahren Sie, wie Sie ein Modul aus einer Zeichenfolge importieren und dasselbe Verhalten wie beim Importieren erzielen. Und versuchen Sie / außer dem Fehlerfall auch. :) :)
und ja, für Python 2.7> haben Sie andere Optionen - aber für 2.6 <funktioniert dies.
quelle
Ich habe diese 3 nützlichen Funktionen entwickelt:
Und jedes Mal, wenn ich eine neue Instanz neu laden möchte, muss ich getInstance () wie folgt aufrufen:
Endlich kann ich alle Funktionen in der neuen Instanz aufrufen:
Die einzige Besonderheit besteht darin, die Parameterliste (param1, param2, param3) Ihrer Instanz anzupassen.
quelle
Neben der Verwendung der Methode
importlib
kann man auchexec
ein Modul aus einer Stringvariablen importieren.Hier zeige ich ein Beispiel für den Import der
combinations
Methode aus einemitertools
Paket mit derexec
Methode:Ausgabe:
quelle