Вот что, у меня есть прокси-сервер, содержащий ссылку на удаленный модуль, и я поместил некоторые из этих прокси в sys.modules, чтобы я мог использовать его так же, как локальные модули. Но некоторые другие объекты помещаются в модуль __builtin__ в удаленной среде (например, волшебная переменная для удобства отладки или ссылки). Я не хочу ссылаться на эти vars как conn.__builtin__.var, и мне нужно либо заменить локальный __builtin__ (который, кажется, не работает для замены sys.modules['__builtin__'], или для привязки глобальных правил поиска имен.
Как? Для модуля вы можете просто перегрузить getattr, чтобы сделать это. Но в интерактивном интерпретаторе, например IPython, кто является основным модулем или как это сделать? update: Как отметил @Nizam Mohamed, да, я могу получить модуль __main__, но все же я не могу изменить роль поиска имени.
Я хочу, чтобы локальная среда полностью была удаленной (для консоли отладки)
UPDATE
Теперь я просто перебираю все __builtin__.__dict__ и если есть имя, которое не находится в локальном __builtin__. Я добавляю имя в локальный __builtin__. Но это не так динамично по сравнению с правилом поиска имени, скажем, если я не могу найти имя в локальном __builtin__ попробуйте удаленный.
здесь является аналогичным обсуждением.
И этот вопрос дает симуляцию модуля, заменив его на объект в sys.modules. Но это не будет работать для поиска __builtin__, я также попытался заменить __builtin__.__getattribute__ на пользовательский, который сначала будет использовать исходный поиск, а затем пользовательский при неудачной попытке. Но глобальный поиск по имени __builtin__, который никогда не вызывался в __builtin__.__getattribute__ even __builtin__.__getattribute__('name'), возвращает желаемое значение, __builtin__.name или name никогда не возвращает один.