【发布时间】:2012-01-11 21:35:17
【问题描述】:
我正在尝试从该模块内部获取导入模块时使用的确切模块名称。像这样的:
def install():
print 'Local module name is %s' % __localModuleName__
当我跑的时候:
import myModule as mm
mm.install()
它会打印出来
Local module name is mm
我尝试制作的脚本会自行安装到外部应用程序 Maya 中。 Maya 评估我在 python 中按需传递的字符串。现在,我正在尝试为 Maya 提供字符串 "myModule.run()"。在这种情况下,当myModule.install() 首次运行时,我必须知道myModule 的确切名称。如果用户使用import myModule as otherModule 导入模块,__name__ 不够具体。
如果有更好的方法来做到这一点,不涉及使用确切的模块名称,我很想知道。就像以某种方式将 myModule.run 的引用转换为我可以存储在 Maya 中并稍后解包的字符串。我一直在尝试使用inspect 模块来查找此信息,但我不断发现它不起作用的情况,我不得不回去再摆弄它一些。它也似乎有点乱。这是我现在正在使用的,如果从 __main__ 调用 myModule 将不起作用。
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 ...导入。
【问题讨论】:
标签: python module namespaces