コードの場合:
#!/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」の使用を制限していないのはなぜですか?
PS私はPython2.6を使用しています
更新:質問は「インポートが機能しないのはなぜですか?」ではありません。しかし、「なぜ印刷が機能するのですか?」アーキテクチャ上の制限などはありますか?