For code:
#!/usr/bin/python
src = \"\"\"
print \'!!!\'
import os
\"\"\"
obj = compile(src, \'\', \'exec\')
eval(obj, {\'__builtins__\': False})
In your eval
the call to import
is made successfully however import
makes use of the __import__
method in builtins which you have made unavailable in your exec
. This is the reason why you are seeing
ImportError: __import__ not found
print
doesn't depend on any builtins so works OK.
You could pass just __import__
from builtins with something like:
eval(obj, {'__builtins__' : {'__import__' :__builtins__.__import__}})