Я работаю над документацией (личной) для библиотеки nested matplotlib (MPL), которая отличается от собственной MPL интересными пакетами подмодулей. Я пишу скрипт на Python, который, я надеюсь, автоматизирует генерацию документов из будущих выпусков MPL.
Я выбрал заинтересованные подмодули / пакеты и хочу перечислить их основные классы, из которых я сгенерирую список и обработаю егоpydoc
Проблема в том, что я не могу найти способ указать Python загрузить субмодуль из строки. Вот пример того, что я пробовал:
import matplotlib.text as text
x = dir(text)
,
i = __import__('matplotlib.text')
y = dir(i)
,
j = __import__('matplotlib')
z = dir(j)
А вот 3 способа сравнения вышеперечисленных списков через pprint:
Я не понимаю, что загружено в y
объект - это база matplotlib
плюс что-то еще, но в ней отсутствует информация, которую я хотел, и это основные классы из matplotlib.text
пакета. Это верхняя синяя часть на скриншоте ( x
список)
Пожалуйста, не предлагайте Сфинксу другой подход.
источник
__import__(str)
а не стандартныйimport
Statemetn?import
оператора. Вот один из примеров использования: djangosnippets.org/snippets/3048Ответы:
__import__
Функция может быть немного трудно понять.Если вы измените
в
тогда
i
будет ссылаться наmatplotlib.text
.В Python 2.7 и Python 3.1 или более поздней версии вы можете использовать
importlib
:Некоторые заметки
Если вы пытаетесь импортировать что-то из подпапки, например
./feature/email.py
, код будет выглядетьimportlib.import_module("feature.email")
Вы ничего не можете импортировать, если
__init__.py
в папке с файлом, который вы пытаетесь импортировать, ничего нетисточник
importlib
должен быть доступен на pypi для <python2.7./feature/email.py
importlib.import_module("feature.email")
__init__.py
в папке с файлом, который вы пытаетесь импортировать, ничего нет .import moduleName
где moduleName является строкой. Как насчетfrom moduleName import *
?importlib.import_module
это то, что вы ищете. Возвращает импортированный модуль. (Доступно только для Python> = 2.7 или 3.x):После этого вы можете получить доступ к чему-либо в модуле, как
mymodule.myclass
и т. Д.источник
imp.load_source(..)
использоватьimp
модуль, предложенный в этом ответе stackoverflow.com/questions/67631/…import moduleName
где moduleName является строкой. Как насчетfrom moduleName import *
?потратил некоторое время, пытаясь импортировать модули из списка, и это поток, который помог мне пройти большую часть пути - но я не понял использование ___import____ -
так вот, как импортировать модуль из строки и получить то же поведение, что и при импорте. И попробуйте / кроме случая ошибки тоже. :)
и да, для python 2.7> у вас есть другие варианты - но для 2.6 <это работает.
источник
Я разработал эти 3 полезные функции:
И каждый раз, когда я хочу перезагрузить новый экземпляр, мне просто нужно вызвать getInstance () следующим образом:
Наконец, я могу вызвать все функции внутри нового экземпляра:
Единственной особенностью здесь является настройка списка параметров (param1, param2, param3) вашего экземпляра.
источник
Помимо использования
importlib
можно также использоватьexec
метод для импорта модуля из строковой переменной.Здесь я показываю пример импорта
combinations
метода изitertools
пакета, используяexec
метод:Вывод:
источник