Ich beabsichtige, bald eine Reihe von Dateien zu erstellen, und die beste Art, sie zu organisieren, ist eine Liste zu haben, diese Liste wird ganz oben in einer Datei stehen, und danach wird es eine lächerliche Menge davon geben Code, um zu behandeln, was diese Liste steuert und wie sie funktioniert. Ich möchte die Liste nur einmal schreiben, und die Liste ist eine Liste von Ordner- und Dateinamen in diesem Format:
%Vor% Wie Sie sehen können, sind folder/filename
gleich (eine Art). Dateiname ist der Ordnername mit .py
am Ende, aber beim Importieren von XXX musst du XXX.py nicht importieren, daher sehe ich kein Problem.
Das Problem, mit dem ich konfrontiert bin, importiert mit dieser Methode ...
%Vor% Also für jeden Test, den ich habe, den Namen ausdrucken, einen String zusammenstellen, der den Pfad enthält ( "\testName"
), für dieses Beispiel den Testpfad ausdrucken, dann den Pfad zur Liste hinzufügen ( sys.path.append(path)
), dann Drucken Sie, um zu bestätigen, dass es passierte, dann stellen Sie eine Zeichenkette zusammen, die von eval
für das Hauptmodul der Tests ausgeführt wird und schließlich es prüft.
Wie Sie sehen können, muss ich momentan eine Liste von Importen an der Spitze haben. Ich kann nicht einfach importieren testName
(der Inhalt von testName
ist der Name des Moduls, das ich importieren möchte), da es versuchen wird, ein Modul namens testName
zu finden, nicht ein Modul namens Inhalt von 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 sich zyklisch innerhalb der .py-Datei befindet, also kein Ende Benutzer "sollte sich damit anlegen).
Ich bin mir nicht sicher, ob ich alles richtig verstanden habe, aber Sie können ein Modul dynamisch mit __import__
importieren:
Bearbeiten : Ich war mir nicht bewusst, dass die Verwendung von __import__
von den Python-Dokumenten für den Benutzercode nicht empfohlen wurde: __import__ Dokumentation (wie von Bakuriu festgestellt)
Dies sollte auch funktionieren und wäre besser Stil:
%Vor%sys.modules
direkt fertig werden, wenn Sie nicht genau wissen, was Sie tun. __import__
imp.load_module
importlib.import_module
Ich würde es vermeiden, __import__
direkt zu verwenden und gehe zu importlib.import_module
(was auch am Ende der Dokumentation von __import__
vorgeschlagen wird).