Найти - Пользователи
Полная версия: храниние Python-кода в базе
Начало » Python для экспертов » храниние Python-кода в базе
1 2
axe
Есть некоторые сущности, с которыми должны быть связаны функции проверки. Функции должны быть написаны на Python (т.к. будут запускаться в Python), содержимое функций должно храниться в базе, вместе с соответствующими сущностями.

Мне надо придумать способ, как эти функции хранить, создавать и отлаживать.

eval при попытке создания функции через def ругается.
regall
Первая мысль - сделать классы-проверщики и хранить их с помощью pickle.

P.S.
Для этого можно также посмотреть в коде фреймворка Zope2, там где-то используется хранение участков кода для последующего выполнения.

P.P.S.
А eval ругается потому что он не умеет, и нужно использовать exec. Хотя я, к примеру, такие аццкие хаки не люблю…
Андрей Светлов
PEP 302. Хранить - хоть в текстовом питоновском виде. Организовав кеш получившихся codeobject для скорости, если нужно (как питон делает с .py -> .pyc)
Отлаживать - еще проще. На время отладки подставлять файлы на диске, а в production эту дыру отключать.
ZZZ
Был тут один… Зачёса
Пишет “симулятор всего”, пытаясь запихать весь игромех (вместе логикой, конечно) в реляцию.
Смотреть тут: http://www.elite-games.ru/conference/viewtopic.php?t=43530

P.S. Только мозг от этого “креатива” не сломайте.
regall
А, это тот который на нашем форуме агитировал с ним делать вселенную будущего? =)) ыыы
ZZZ
Ага… Редкий человек… Гений! Никто не понимает, того, что он хочет сделать! Даже Он сам. :-D
axe
Андрей, я пробую читать по инету про PEP302, но пока не могу разобраться. Есть и ограничения в знании английского, и до Вашего уровня в python мне очень далеко. Если можно, ответьте чуть более подробно?
Видимо, надо копать в сторону модуля imp?

ZZZ, по ссылке посмотрел первые три страницы. По-моему, к теме не очень относится. Просмотреть все 58 страниц обсуждения не могу, т.к. ограничение трафика на рабочем месте. Может быть вечером взгляну.
bw
> eval при попытке создания функции через def ругается.
> и нужно использовать exec
__builtins__.compile(…) ?

Можно хранить (и при необходимости выполнять) и байт-код, но нужно следить за версией Python (в какой был этот код создан и в какой сейчас будет интерпретироваться). Я так поступал в детстве.

p.s. Хотя я не понял что требуется, наугад сказал :-).

..bw
axe
получается следующее:
BODY = """
class m(object):
z = []
def __init__(self):
pass

def hello():
print "hello"
"""
exec(compile(BODY, "<string>", "exec"))
hello()
print dir(m())
axe
видимо и без compile всё работает:
exec("""
def hello():
print "hello"
""")
hello()
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB