Pracuję nad dokumentacją (osobistą) dla zagnieżdżonej biblioteki matplotlib (MPL), która różni się od dostarczonej przez siebie MPL, zainteresowanymi pakietami podmodułów. Piszę skrypt Python, który, mam nadzieję, zautomatyzuje generowanie dokumentów z przyszłych wydań MPL.
Wybrałem zainteresowane moduły / pakiety i chcę wymienić ich główne klasy, z których wygeneruję listę i przetworzę jąpydoc
Problem polega na tym, że nie mogę znaleźć sposobu, aby poinstruować Python, aby ładował submoduł z łańcucha. Oto przykład tego, co próbowałem:
import matplotlib.text as text
x = dir(text)
.
i = __import__('matplotlib.text')
y = dir(i)
.
j = __import__('matplotlib')
z = dir(j)
A oto 3-kierunkowe porównanie powyższych list przez pprint:
Nie rozumiem, co jest załadowane w y
obiekcie - jest to podstawa matplotlib
plus coś jeszcze, ale brakuje mi informacji, których chciałem i to są główne klasy z matplotlib.text
pakietu. Jest to niebieska część na zrzucie ekranu ( x
lista)
Proszę nie sugerować Sfinksa jako innego podejścia.
źródło
__import__(str)
zamiast standardowejimport
statystyki?import
instrukcją. Oto przykład użycia: djangosnippets.org/snippets/3048Odpowiedzi:
__import__
Funkcja może być nieco trudne do zrozumienia.Jeśli się zmienisz
do
wtedy
i
będzie odnosić się domatplotlib.text
.W Python 2.7 i Python 3.1 lub nowszy możesz użyć
importlib
:Kilka notatek
Jeśli próbujesz np. Zaimportować coś z podfolderu
./feature/email.py
, kod będzie wyglądałimportlib.import_module("feature.email")
Nie możesz zaimportować niczego, jeśli nie ma
__init__.py
w folderze pliku, który próbujesz zaimportowaćźródło
importlib
powinien być dostępny na pypi dla <python2.7./feature/email.py
), kod będzie wyglądałimportlib.import_module("feature.email")
__init__.py
w folderze pliku, który próbujesz zaimportować.import moduleName
gdy string nazwa_modułu jest ciągiem. Jak ofrom moduleName import *
?importlib.import_module
jest tym, czego szukasz. Zwraca zaimportowany moduł. (Dostępne tylko dla Pythona> = 2.7 lub 3.x):Następnie możesz uzyskać dostęp do czegokolwiek w module jako
mymodule.myclass
itp.źródło
imp.load_source(..)
użycieimp
modułu zgodnie z sugestią zawartą w tej odpowiedzi stackoverflow.com/questions/67631/...import moduleName
gdzie ciąg nazwa_modułu to. Jak ofrom moduleName import *
?spędziłem trochę czasu próbując zaimportować moduły z listy, i to jest wątek, który zapewnił mi najwięcej możliwości - ale nie zrozumiałem użycia ___import____ -
więc oto jak zaimportować moduł z łańcucha i uzyskać to samo zachowanie, co po prostu import. I spróbuj / oprócz przypadku błędu. :)
i tak, dla Pythona 2.7> masz inne opcje - ale dla 2.6 <to działa.
źródło
Opracowałem 3 przydatne funkcje:
I za każdym razem, gdy chcę ponownie załadować nową instancję, muszę wywołać metodę getInstance () w następujący sposób:
Wreszcie mogę wywołać wszystkie funkcje w nowej instancji:
Jedyną specyficznością tutaj jest dostosowanie listy parametrów (param1, param2, param3) instancji.
źródło
Oprócz użycia tego
importlib
można również użyćexec
metody importowania modułu ze zmiennej łańcuchowej.Oto przykład importowania
combinations
metody zitertools
pakietu przy użyciuexec
metody:Wynik:
źródło