import modułu ze zmiennej string
Pracuję nad dokumentacją (osobistą) dla zagnieżdżonej biblioteki matplotlib (MPL), która różni się od MPL własnej dostarczonej przez zainteresowane Pakiety podmodułów. Piszę skrypt Pythona, który mam nadzieję zautomatyzuje generowanie dokumentów z przyszłych wydań MPL.
Wybrałem interesujące podmoduły/pakiety i chcę wyświetlić listę ich głównych klas, z których wygeneruję listę i przetworzę ją za pomocą pydoc
Problem polega na tym, że nie mogę znaleźć sposobu, aby polecić Pythonowi Ładowanie podmodułu z string. Oto przykład tego, czego 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-drożne porównanie powyższych list przez pprint:
Nie rozumiem, co jest załadowane w y
object - to baza matplotlib
plus coś innego, ale brakuje w niej informacji, które chciałem i to są główne klasy z matplotlib.text
pakietu. Jest to górna niebieska część na zrzucie ekranu (x
lista)
Proszę nie sugerować Sfinksa jako innego podejścia.
3 answers
Funkcja __import__
może być nieco trudna do zrozumienia.
Jeśli zmienisz
i = __import__('matplotlib.text')
Do
i = __import__('matplotlib.text', fromlist=[''])
Wtedy i
będzie odnosić się do matplotlib.text
.
importlib
:
import importlib
i = importlib.import_module("matplotlib.text")
Niektóre notatki
Jeśli próbujesz zaimportować coś z podfolderu np.
./feature/email.py
, kod będzie wyglądał tak:importlib.import_module("feature.email")
-
Nie możesz niczego importować, jeśli nie ma
__init__.py
w folderze z plikiem, który próbujesz aby zaimportować
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-30 06:37:27
Myślę importlib.import_module jest tym, czego szukasz. (Dostępne tylko dla Pythona >= 2.7 lub 3.x):
importlib.import_module('matplotlib.text')
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-03 21:49:58
Spędziłem trochę czasu próbując zaimportować moduły z listy, i to jest wątek, który najbardziej mnie tam zainteresował-ale nie zrozumiałem użycia _ _ _ import _ _ _ _ -
Oto jak zaimportować moduł z ciągu znaków i uzyskać takie samo zachowanie jak po prostu import. I spróbuj / z wyjątkiem przypadku błędu, zbyt. :)
pipmodules = ['pycurl', 'ansible', 'bad_module_no_beer']
for module in pipmodules:
try:
# because we want to import using a variable, do it this way
module_obj = __import__(module)
# create a global object containging our module
globals()[module] = module_obj
except ImportError:
sys.stderr.write("ERROR: missing python module: " + module + "\n")
sys.exit(1)
I tak, dla Pythona 2.7> masz inne opcje - ale dla 2.6
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-20 23:03:38