Импорт * из модуля путем импорта через строку
Я знаю, что я могу использовать importlib
для импорта модулей через строку. Как я могу воссоздать функциональность import *
, используя эту библиотеку? В принципе, я хочу что-то вроде этого:
importlib.import_module('path.to.module', '*')
Мои причины непересекания импортированных атрибутов не являются преднамеренными.
Ответы
Ответ 1
Вот решение: импортируйте модуль, а затем один за другим сделайте псевдоним в текущем пространстве имен:
import importlib
# Import the module
mod = importlib.import_module('collections')
# Determine a list of names to copy to the current name space
names = getattr(mod, '__all__', [n for n in dir(mod) if not n.startswith('_')])
# Copy those names into the current name space
g = globals()
for name in names:
g[name] = getattr(mod, name)
Ответ 2
Ниже приведена версия для @HaiVu answer, которая ссылается на это решение от @Bakuriu
import importlib
#import the module
mod = importlib.import_module('collections')
#make the variable global
globals().update(mod.__dict__)
Примечание:
-
Это будет импортировать множество вещей помимо пользовательских переменных
-
Решение @HaiVu сделало все возможное, т.е. импортировать только определенные пользователем переменные