Импорт * из модуля путем импорта через строку

Я знаю, что я могу использовать 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 сделало все возможное, т.е. импортировать только определенные пользователем переменные