Programowalne importy w Pythonie

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

hauser
24 February, 2008, midnight:

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 .

pagenoare
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)


Comments turned off