Как я могу понять, как класс или функция была импортирована в python? Я знаю, что существует __module__
, но это не всегда работает. Пример, в котором __module__
терпит неудачу:Получить как класс или функция Python был импортирован
>>> from os.path import join
>>> join.__module__
'ntpath'
В этом примере, я хотел бы получить os.path
вместо этого. ntpath
- это функция, которая была определена, а не пакет, из которого я импортировал функцию.
Edit:
В частности, по этой причине я хотел бы получить os.path
вместо ntpath
потому, что os.path
зависит от платформы, тогда как ntpath
существует только на Windows. Аналогично, в системах * nix os.path
реализован с использованием posixpath
. Если никто не сможет дать мне надежный способ решения этой проблемы, я предполагаю, что приемлемой заменой будет какая-то карта, которую я мог бы использовать, чтобы карты из модулей реализации возвращались в кросс-платформенные модули. IE, чтобы начать его это будет выглядеть следующим образом:
{
'nt' : 'os',
'ntpath' : 'os.path',
'posixpath': 'os.path',
}
мне нужно только те модули, которые являются частью стандартного Python установки (в частности 2.7).
Второй Edit:
Я хочу, чтобы сделать возможным, чтобы написать что-то вроде этого:
from pyRemote import Remote # The module I'm writing
from os.path import join
remote = Remote(hostname, username, password)
pathOnRemoteMachine = remote.join(component1, component2)
Чтобы сделать эту работу, Remote
реализует __getattr__
путем поиска имя атрибута в пространстве имен вызывающего (используя некоторые методы из inspect
.) Он находит, что в вызывающем пространстве имен функция join
является функцией. Он должен знать, откуда можно импортировать join
, чтобы он мог передать удаленный экземпляр Python для импорта той же функции. Поскольку локальный экземпляр Python может работать на другой ОС с удаленного экземпляра Python (IE, локальный может быть Windows, а удаленный может быть RedHat), я не хочу, чтобы конкретный модуль реализации (ntpath
в данном случае) - я хочу, чтобы кросс-платформенный модуль (os.path
в этом случае).
Я также рассмотрю сценарий необходимости импорта из модуля, который пришел из pip, сообщив удаленному компьютеру о его загрузке из первого пункта или сценарий, необходимый для импорта из файла, написанного пользователем, путем копирования этот файл закончился.
Итак, это огромная куча магии и хаков, чтобы обеспечить очень элегантный (IMO) способ управления удаленным экземпляром Python с использованием локального экземпляра Python.
Эта проблема неразрешима. –
в вашем примере, 'ntpath' - это модуль, из которого он импортирован. – Tritium21
Что вы пытаетесь сделать? Может быть, есть лучший способ. –