Powiel możliwe:
Dynamic module import in PythonImportuj plik używając ciąg jako nazwa
Zamierzam złożyć zestaw plików w pewnym momencie wkrótce, a najlepszym sposobem, aby zorganizować to mieć lista, ta lista będzie na samym szczycie pliku, a po niej pojawi się śmieszna ilość kodu do obsługi tego, co ta lista kontroluje i jak działa. Szukam napisać wspomnianej listy tylko raz, a że lista jest listą nazw folderów i plików w tym formacie:
[(folder/filename, bool, bool, int), (folder/filename, bool, bool, int)]
Jak widać, folder/filename
są takie same (w pewnym sensie). Nazwa pliku to nazwa folderu z końcem .py
, ale podczas importowania pliku XXX nie trzeba importować pliku XXX.py, więc nie widzę powodującego problemu.
Problem jestem stoi importuje użyciu tej metody ...
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)
Więc dla każdego testu mam wydrukować nazwę, montaż ciąg, który zawiera ścieżkę ("\\testName"
), na tym przykładzie , wydrukuj ścieżkę testową, a następnie dodaj ścieżkę do listy (sys.path.append(path)
), a następnie wydrukuj, aby potwierdzić, że to się stało, a następnie zmontuj ciąg znaków, który zostanie wykonany przez eval
dla modułu głównego testów i ewentualnie sprawdź go.
Jak widać, obecnie muszę mieć listę importów na górze. Nie mogę po prostu importować testName
(zawartość testName
to nazwa modułu, który chcę zaimportować), ponieważ spróbuje znaleźć moduł o nazwie testName
, a nie moduł o nazwie testName
.
Widziałem kilka przykładów tego, gdzie zostało to zrobione, ale nie mogę znaleźć żadnej pracy w moich okolicznościach. Jeśli ktoś mógłby dosłownie rzucić kawałek kodu, który to byłoby wspaniałe.
Prosiłbym również o to, żebym nie był zawieszony, narysowany ani poćwiartowany na użytek eval, jest używany w bardzo kontrolowanym środowisku (lista, przez którą cyklicznie jest w pliku .py, więc nie ma " użytkownik końcowy "powinien się z tym pogodzić).
Zauważ, że wcięcie jest poprawna w ST, z jakiegoś powodu myślę, że ta strona po prostu nie lubi parsowania mój tekst poprawnie :( – XtrmJosh
Nie należy używać kart, ale obowiązuje dla wcięcia. –
Python ma już sposób zarządzania dużymi kolekcjami plików ".py", które możesz zaimportować, które rozpoznają foldery i podfoldery, umożliwiają obsługę importów względnych, poprawne tworzenie przestrzeni nazw itd. Nazywa się to [pakiet] (http: // docs. python.org/2/tutorial/modules.html#packages). Czy istnieje powód, dla którego nie chcesz go używać? – katrielalex