リモートモジュールへの参照を保持するプロキシがあり、これらのプロキシのいくつかをsys.modules
ローカルモジュールと同じように使用できるようにします。しかし、他のいくつかのオブジェクトは__builtin__
、リモート環境でモジュールに入れられます (デバッグや参照に便利なマジック変数など)。のようにこれらの var を参照したくありませんconn.__builtin__.var
。ローカル__builtin__
を置き換える必要があります (replace では機能しないsys.modules['__builtin__']
か、グローバルな名前検索ルールをフックする必要があります。どうすればよいでしょうか?モジュールの場合は、getattr
これを行うために a をオーバーロードするだけです。しかし、のようなインタラクティブなインタープリターIPython
で、メインモジュールは誰ですか、またはこれを行う方法は? 更新: @Nizam Mohamed が指摘したように、はい、取得できます__main__
モジュールですが、それでも名前検索の役割を変更できません。
ローカル環境を完全にリモート環境にしたい (デバッグ コンソール用)
アップデート
今のところ__builtin__.__dict__
、ローカルにない名前がある場合は、すべてを繰り返すだけ__builtin__
です。ローカルの に名前を追加し__builtin__
ます。しかし、ローカルで名前が見つからない場合は__builtin__
、リモートの名前を試してみてください。
ここに同様の議論があります。
そして、この質問は、モジュールを のオブジェクトに置き換えることで、モジュールのシミュレーションを提供しますsys.modules
。しかし、これは名前ルックアップでは機能しません。また、最初に元のルックアップを使用し、失敗したときにカスタム ルックアップを使用するカスタム ルックアップ__builtin__
に置き換えようとしました。ただし、イベントに呼び出されないグローバル__builtin__.__getattribute__
名のルックアップは、目的の値を返すか、値を返しません。__builtin__
__builtin__.__getattribute__
__builtin__.__getattribute__('name')
__builtin__.name
name