Вот что, у меня есть прокси-сервер, содержащий ссылку на удаленный модуль, и я поместил некоторые из этих прокси в 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
никогда не возвращает один.