Импорт модуля python в dict (для использования в качестве глобальных переменных в execfile ())?

Я использую функцию Python execfile () как простой, но гибкий способ обработки файлов конфигурации - в основном, идея такова:

# Evaluate the 'filename' file into the dictionary 'foo'.
foo = {}
execfile(filename, foo)

# Process all 'Bar' items in the dictionary.
for item in foo:
  if isinstance(item, Bar):
    # process item

Это требует, чтобы моя конфигурация файл имеет доступ к определению класса Bar . В этом простом примере это тривиально; мы можем просто определить foo = {'Bar': Bar} , а не пустой dict. Однако в реальном примере у меня есть целый модуль, который я хочу загрузить. Один очевидный синтаксис для этого:

foo = {}
eval('from BarModule import *', foo)
execfile(filename, foo)

Однако я уже импортировал BarModule в свой файл верхнего уровня, поэтому мне кажется, что я могу просто напрямую определить foo как набор вещей, определенных BarModule , без необходимости проходить эту цепочку из eval и import .

Есть ли простой идиоматический способ сделать это?

6
задан Brooks Moses 25 February 2012 в 19:32
поделиться