Зависит от вашего определения сейфа, я полагаю. Безопасность в значительной степени зависит от того, что вы передаете и что вам разрешено передавать в контексте. Например, если файл передан, я могу открыть произвольные файлы:
>>> names['f'] = open('foo', 'w+')
>>> safe_eval.safe_eval("baz = type(f)('baz', 'w+')", names)
>>> names['baz']
<open file 'baz', mode 'w+' at 0x413da0>
Кроме того, среда очень ограничена (вы не можете передавать модули), поэтому вы не можете просто передать модуль функций утилит, таких как re или random.
С другой стороны, вам не нужно писать собственный анализатор, вы можете просто написать собственный оценщик для python ast:
>>> import compiler
>>> ast = compiler.parse("print 'Hello world!'")
Таким образом, мы надеемся, вы могли бы реализовать безопасный импорт. Другая идея заключается в использовании Jython или IronPython и использовании возможностей песочницы Java / .Net.