Piszę aplikację Pythona, który przyjmuje jako polecenie jako argument, na przykład:moduł dynamiczny import w Pythonie
$ python myapp.py command1
chcę aplikacji są rozciągliwe, to znaczy, aby móc dodać nowe moduły, które implementują nowe polecenia bez konieczności zmiany głównego źródła aplikacji. Drzewo wygląda mniej więcej tak:
Chcę, aby aplikacja znalazła dostępne moduły poleceń w czasie wykonywania i uruchomiła odpowiednią.
Obecnie ten realizowany jest coś takiego:
command = sys.argv[1]
try:
command_module = __import__("myapp.commands.%s" % command, fromlist=["myapp.commands"])
except ImportError:
# Display error message
command_module.run()
Działa to dobrze, jestem po prostu zastanawiasz się, czy jest możliwe bardziej idiomatyczne drogą do osiągnięcia tego, co robimy z tym kodem.
Należy zauważyć, że szczególnie nie chcę się przyzwyczaić do używania jaj lub punktów rozszerzenia. To nie jest projekt open-source i nie oczekuję, że będą to "wtyczki". Chodzi o to, aby uprościć główny kod aplikacji i usunąć potrzebę jej modyfikacji za każdym razem, gdy dodawany jest nowy moduł poleceń.
Czego z_listy = [ "myapp.commands"] zrobić? –
@ PieterMüller: w powłoce Pythona wpisz: '' dir (__ import __) ''. Lista powinna zawierać listę nazw do naśladowania "od nazwy import ...". – mawimawi
[Importuj moduł ze zmiennej łańcuchowej] (http://stackoverflow.com/questions/8718885/import-module-z-strumienia-zmiennego) –