Eventuali duplicati:
Dynamic module import in PythonImporta file utilizzando stringa come nome
ho intenzione di fare una serie di file ad un certo punto presto, e il modo migliore per organizzarlo è di avere una lista, quella lista sarà in cima a un file, e dopo verrà una ridicola quantità di codice per gestire ciò che l'elenco controlla e come funziona. Sto cercando di scrivere tale lista solo una volta, e tale elenco è un elenco di nomi di cartelle e file in questo formato:
[(folder/filename, bool, bool, int), (folder/filename, bool, bool, int)]
Come si può vedere, folder/filename
sono gli stessi (o quasi). Il nome del file è il nome della cartella con .py
alla fine, ma con l'importazione XXX non è necessario importare XXX.py, quindi non vedo questo causa di problemi.
Il problema che sto affrontando è l'importazione utilizzando questo metodo ...
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)
Quindi per ogni test che ho, stampare il nome, assemblare una stringa che contiene il percorso ("\\testName"
), per questo esempio , stampare il percorso di test, quindi aggiungere il percorso all'elenco (sys.path.append(path)
), quindi stampare per confermare che è successo, quindi assemblare una stringa che verrà eseguita da eval
per il modulo principale di test e infine evalificarlo.
Come potete vedere, attualmente sto avendo un elenco di importazioni nella parte superiore. Non posso semplicemente importare testName
(il contenuto di testName
è il nome del modulo che desidero importare), poiché proverà a trovare un modulo chiamato testName
, non un modulo chiamato il contenuto di testName
.
Ho visto alcuni esempi di dove è stato fatto, ma non riesco a trovare nessuno che funzioni nelle mie circostanze. Se qualcuno potesse letteralmente buttare un pezzetto di codice che lo farebbe sarebbe meraviglioso.
Avrei anche richiesto che non venissi appeso, disegnato, né squartato per l'uso di eval, esso sia usato in un ambiente molto controllato (l'elenco attraverso il quale si muove all'interno del file .py, quindi no " l'utente finale "dovrebbe scherzare con esso).
Si noti che il rientro è corretto in ST, per qualche ragione, penso che questo sito semplicemente non piace l'analisi mio testo correttamente :( – XtrmJosh
Non utilizzare le schede, ma gli spazi per l'indentazione. –
Python ha già un modo di gestire grandi raccolte di file '.py' che potresti voler importare, che capiscono le cartelle e le sottocartelle, ti permettono di gestire le importazioni relative, il namespaces in modo appropriato e così via. Si chiama un [pacchetto] (http: // docs. python.org/2/tutorial/modules.html#packages). C'è un motivo per cui non vuoi usarne uno? – katrielalex