Это на самом деле нетривиально.
Существует два способа «песочницы» Python.Один из них - создать ограниченную среду (т. Е. Очень мало глобальных переменных и т. Д.) И exec
ваш код внутри этой среды.Это то, что предлагает Месса.Это хорошо, но есть много способов вырваться из песочницы и создать проблемы.Примерно год назад на Python-dev была тема, в которой люди делали что-то от перехвата исключений и поиска внутреннего состояния, чтобы перейти к манипулированию байтовым кодом.Это путь, если вам нужен законченный язык.
Другой способ - проанализировать код и затем использовать модуль ast
, чтобы удалить ненужные конструкции (например, операторы import, функциязвонки и т. д.), а затем собрать все остальное.Это тот путь, если вы хотите использовать Python в качестве языка конфигурации и т. Д.
Другой способ (который может не сработать для вас, поскольку вы используете GAE) - это PyPy sandbox .Хотя я сам этим не пользовался, на межтрубках говорят, что это единственный настоящий Python в песочнице.
Исходя из вашего описания требований (требования - это поддержка переменных, базовых условий и вызовов функций (не определений)), вы могли бы захотеть оценить подход 2 и исключить все остальноеиз кода.Это немного сложно, но выполнимо.