Para el código:qué puedo llamar 'imprimir' desde 'eval'
#!/usr/bin/python
src = """
print '!!!'
import os
"""
obj = compile(src, '', 'exec')
eval(obj, {'__builtins__': False})
me sale de salida:
!!!
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
Tanto 'imprimir' e 'importación' son construcción del lenguaje. ¿Por qué 'eval' restringe el uso de 'import' pero no restringe 'print'?
P.S. Estoy usando Python 2.6
ACTUALIZACIÓN: La pregunta no es "¿Por qué la importación no funciona?" pero "¿Por qué funciona la impresión?" ¿Hay algunas restricciones de arquitectura u otra cosa?
La pregunta no es "¿Por qué la importación no funciona?" pero "¿Por qué funciona la impresión?" – Tiendil
print se convierte en un método en python 3k, apuesto a que ya no funcionará :) – Sacha