Я пытаюсь получить точное имя модуля, с которым был импортирован модуль, из этого модуля.Примерно так:
def install():
print 'Local module name is %s' % __localModuleName__
И когда я запустил:
import myModule as mm
mm.install()
Будет напечатано
Local module name is mm
Скрипт, который я пытаюсь сделать, устанавливает себя ввнешнее приложение майя.Maya оценивает строку, которую я передаю по требованию в python.Прямо сейчас я пытаюсь дать Майе строку "myModule.run()"
.В этом случае мне нужно знать точное имя myModule
при первом запуске myModule.install()
.__name__
недостаточно конкретно, если пользователь импортирует модуль, используя import myModule as otherModule
.
Если есть лучший способ сделать это, не связанный с использованием точного имени модуля, я бы хотел знать.Как-то конвертировать ссылку myModule.run
в строку, которую я мог хранить в Maya, а затем распаковать.Я пытался использовать модуль inspect
, чтобы найти эту информацию, но я продолжаю находить ситуации, когда она не работает, и мне приходится возвращаться и возиться с ней еще немного.Это также кажется немного грязным.Это то, что я использую прямо сейчас, и это не работает, если myModule
вызывается с __main__
.
MODULENAME = None
fr = inspect.currentframe()
try:
while fr and not MODULENAME:
if fr.f_globals:
for name, obj in fr.f_globals.iteritems():
if hasattr(obj, '__file__') and inspect.ismodule(obj) and obj.__file__ == __file__:
MODULENAME = name
fr = fr.f_back
except:
pass
finally:
del fr
Если не существует хорошего решения, я планирую удалить приведенное выше и сообщитьпользователи, которые не могут импортировать мой модуль, используя import myModule as ...
.