Programowalne importy w Pythonie
- Opublikowano February 5, 2008
- komentarze 2
Ostatnio musiałem paru osobom pokazać jak zaimportować coś programowalnie w Pythonie. Umieszczam tutaj ten opis jak to zrobić, może komuś się przyda.
To zaimportuje cały pakiet moj.jakis.pakiet
nazwa_pakietu = 'moj.jakis.pakiet'
zaimportowanypakiet = __import__(nazwa_pakietu, globals(),locals(),[''])
potem mamy
zaimportowanypakiet.MojaJakasKlasa
można też to wstawić do zmiennej
definicja_klasy = getattr(zaimportowanypakiet, 'MojaJakasKlasa')
potem nasza "definicja_klasy" będzie mieć w sobie atrybuty i metody klasy
instancja_klasy = definicja_klasy(atrybut1=1, atrybut2=2)
Komentarze
24 February, 2008, 9:48 a.m.:
Ja to robię tak: import sys
sys.path.append('./plugins')
./plugins - folder z pluginami/modulami do załadowania
loaded = import('nazwa') plugin = loaded.plugin()
gdzie plugin to nazwa klasy
getattr(plugin, 'install')(self, argsy)
Trick z podaniem ostatniego parametry (fromlist) jako [''] może być zdradliwe i powodować podwójną inicjalizację modułów, szczegóły tutaj: http://bugs.python.org/issue2090 .
Lepiej użyć funkcji takiej jak my_import opisanej w dokumentacji: http://docs.python.org/lib/built-in-funcs.html .