Форум сайта python.su
Хочу сделать так, что импортировал модули, код которых лежит в БД. При этом не делая промежуточного сохранения на диск.
У кого нибудь есть идеи? =)
Офлайн
Попробовать `compile`, а потом его через `eval` пропустить. Так что с импортом будет не представляю:)
Офлайн
Вот мой вариант:>>> import imp
>>> def dynamic_mod(mod_name, source):
mod = imp.new_module(mod_name)
exec(source) in mod.__dict__
return mod
>>> source = ‘'’
import this
a = 1
b = 2'''
>>> my_mod = dynamic_mod('my_mod', source)
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
…
>>> my_mod.a
1
Офлайн
ZANЛюбопытно. А как его импортировать через `import`? можно ли это сделать прозрачно для клиентского кода?
Вот мой вариант:
Офлайн
ZAN
О! отлично. Я как рза продирался сквозь дебри PEPa на эту тему. =)
Офлайн
а что означает
exec(source) in mod.__dict__
??
Офлайн
Кстати, какое вообще отличие eval() от exec
Офлайн
DaevaornЧестно говоря, как изменить поведение import statement, не знаю. Врядли это вообще возможно.
Любопытно. А как его импортировать через `import`? можно ли это сделать прозрачно для клиентского кода?
Офлайн
shizaПросто есть возможность явно указать область видимости для динамического выполнения кода. Синтаксис такой:
а что означает
exec(source) in mod.__dict__
??
Офлайн
ZANКак-то это точно можно сделать, например py2exe это реализует.
Честно говоря, как изменить поведение import statement, не знаю. Врядли это вообще возможно.
Офлайн