Mögliche Duplizieren:
Dynamic module import in PythonImport-Datei mit Zeichenfolge als Name
Ich beabsichtige, bald eine Reihe von Dateien zu einem bestimmten Zeitpunkt zu machen, und der beste Weg, es zu organisieren, zu haben ist eine Liste, diese Liste wird ganz oben in einer Datei stehen, und danach wird eine lächerliche Menge an Code kommen, um zu handhaben, was diese Liste steuert und wie sie funktioniert. Ich bin auf der Suche auf die Liste schreiben nur einmal, und die Liste eine Liste der Ordner- und Dateinamen in diesem Format ist:
[(folder/filename, bool, bool, int), (folder/filename, bool, bool, int)]
Wie Sie sehen können, folder/filename
gleich sind (Art). Dateiname ist der Ordnername mit .py
am Ende, aber wenn Sie XXX importieren, müssen Sie XXX.py nicht importieren, daher sehe ich kein Problem.
Das Problem, das ich bin Bewurf ist mit dieser Methode importieren ...
for (testName, auto, hardware, bit) in testList:
print(testName)
paths = "\\" + testName
print paths
addpath(paths)
sys.modules[testName] = testName # One of a few options I've seen suggested on the net
print("Path Added")
test = testName + ".Helloworld()"
eval(test)
den Namen also für jeden Test, den ich habe, drucken, ein String zusammenstellen, das den Pfad enthält ("\\testName"
), für dieses Beispiel , drucke den Testpfad, füge dann den Pfad zur Liste hinzu (sys.path.append(path)
), drucke dann, um zu bestätigen, dass es passiert ist, dann füge einen String zusammen, der von eval
für das Hauptmodul des Tests ausgeführt wird und schließlich prüft.
Wie Sie sehen können, muss ich derzeit eine Liste von Importen an der Spitze haben. Ich kann nicht einfach testName
importieren (der Inhalt von testName
ist der Name des Moduls, das ich importieren möchte), da es versuchen wird, ein Modul namens testName
zu finden, kein Modul mit dem Inhalt testName
.
Ich habe ein paar Beispiele gesehen, wo das gemacht wurde, aber ich finde keine, die unter meinen Umständen funktionieren. Wenn jemand im wahrsten Sinne des Wortes einen Code schreiben könnte, wäre das wunderbar.
Ich würde auch verlangen, dass ich nicht aufgehängt, gezeichnet oder geviertelt werde, um eval zu verwenden, es wird in einer sehr kontrollierten Umgebung verwendet (die Liste, durch die es zyklisch ist innerhalb der .py-Datei, also nicht ") Endbenutzer "sollte sich damit anlegen).
Beachten Sie, dass die Vertiefung in ST korrekt ist, aus irgendeinem Grund denke ich, diese Seite einfach nicht mein Text richtig mag das Parsen :( – XtrmJosh
nicht Tabs aber Leerzeichen für die Einrückung Sie. –
Python hat bereits einen Weg B. das Verwalten umfangreicher Sammlungen von '.py'-Dateien, die Sie möglicherweise importieren möchten, die Kenntnis von Ordnern und Unterordnern, die Handhabung relativer Imports, das korrekte Namespacing usw. Es wird als [Paket] (http: // docs. python.org/2/tutorial/modules.html#packages) Gibt es einen Grund, warum du keinen verwenden willst? – katrielalex