Динамический импорт в Python - PullRequest
2 голосов
/ 01 декабря 2011

Как сделать этот импорт:

from module import *

с imp модулем?

Отказ от ответственности:

  • Мне нужно использовать imp модуль, потому чтоМне нужно сделать несколько заявлений, и я хочу сделать это динамически
  • Мне нужно использовать *, потому что мне нужно, чтобы в файле, который я сделал для импорта, переменные и методы, определенные в module, были доступны напрямую, язначит without module.method или module.variable.И я хочу импортировать все переменные и методы в модуль, потому что я не знаю, какие методы или переменные могут быть в модуле в будущем

Ответы [ 3 ]

5 голосов
/ 01 декабря 2011

Здесь!

def load_everything_from(module_names):
    g = globals()
    for module_name in module_names:
        m = __import__(module_name)
        names = getattr(m, '__all__', None)
        if names is None:
            names = [name for name in dir(m) if not name.startswith('_')]
        for name in names:
            g[name] = getattr(m, name)

Я немного придумываю ситуацию, пытаясь сначала найти символ __all__, а затем, если это файлы, выполнить dir() и захватить символыэто выглядит не приватно - вам нужно взглянуть на реализацию import *, чтобы узнать, достаточно ли это похоже на реальную логику Python для ваших целей.

1 голос
/ 01 декабря 2011

Если вы используете django (как упомянуто в комментариях), что-то вроде этого должно работать

from django.utils import importlib
my_module = importlib.import_module('app.my_module')
from my_module import *

Но я согласен, что это может быть опасно

0 голосов
/ 01 декабря 2011

Вы можете сделать это:

from imp import *

, но помните:

Явное лучше, чем неявное.

(от Дзен Python - прочитайте его, используя следующую команду: import this)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...