事情是这样的,我有一个代理持有对远程模块的引用,我将其中的一些代理放在sys.modules
这样我可以像本地模块一样使用它的地方。但是其他一些对象被放在__builtin__
远程环境的模块中(例如为了方便调试或引用的魔术变量)。我不想像这样引用这些变量conn.__builtin__.var
,并且我必须替换本地__builtin__
(这似乎不适用于替换sys.modules['__builtin__']
或挂钩全局名称查找规则。如何?对于一个模块,您可以重载 agetattr
来执行此操作。但是在像这样的交互式解释器中IPython
,谁是主要模块或如何做到这一点? 更新:正如@Nizam Mohamed 所指出的,是的,我可以得到__main__
模块,但我仍然无法修改它的名称查找角色。
我想将本地环境完全变成远程环境(用于调试控制台)
更新
现在我只是迭代所有的__builtin__.__dict__
,如果有一个名字不在 local 中__builtin__
。我将名称添加到本地的__builtin__
. 但与名称查找规则相比,它并不是那么动态,如果我在本地找不到名称,请__builtin__
尝试远程名称。
这是一个类似的讨论。
而这个问题通过将其替换为sys.modules
. 但这不适用于__builtin__
名称查找,我还尝试将其替换__builtin__.__getattribute__
为自定义名称,该自定义名称将首先使用原始查找,然后在失败时使用自定义查找。__builtin__
但是从不调用的全局名称查找__builtin__.__getattribute__
甚至__builtin__.__getattribute__('name')
返回所需的值,__builtin__.name
或者name
从不返回一个。