Для кода:
#!/usr/bin/python
src = """
print '!!!'
import os
"""
obj = compile(src, '', 'exec')
eval(obj, {'__builtins__': False})
Я получаю вывод:
!!!
Traceback (most recent call last):
File "./test.py", line 9, in <module>
eval(obj, {'__builtins__': False})
File "", line 3, in <module>
ImportError: __import__ not found
И print, и import являются языковой конструкцией. Почему 'eval' ограничивает использование 'import', но не ограничивает 'print'?
P.S. Я использую Python 2.6
ОБНОВЛЕНИЕ: Вопрос не в том, почему импорт не работает? но "Почему работает печать?" Есть какие-то архитектурные ограничения или что-то еще?