【发布时间】:2010-12-30 11:00:03
【问题描述】:
我写了一个小脚本。它旨在搜索所有可用模块的python目录(无论它们是否已安装),然后它应该检查当前加载了哪些模块,然后它提供了一个选项来动态加载您选择的模块。后者使用__import__(),因为我正在向它传递一个字符串 - (这是我遇到问题的地方 - 但我很快就会回到它)......然后它提供了“浏览”模块的选项它的所有类、函数等(使用dir([module name]) ...)。
问题:
当模块被动态加载时——它嵌入在try/except 语句中——如果成功,它报告“模块已加载”,如果失败,它报告...duh...“加载失败。 ..”
如果您键入模块的名称,例如名为“uu”的模块,它会显示“已加载”。所以我知道它正在加载 - 但是,当我返回并调用检查所有 LOADED 模块的函数时 - 它是空白的(使用sys.modules)
我认为 python 正在将模块加载到不是 sys.modules 的临时位置,因为当我退出脚本并检查 sys.modules 时,它不存在。
【问题讨论】:
-
在此处粘贴脚本而不是粘贴链接
-
此脚本太长,无法直接放入问题中。
-
我无法粘贴整个脚本 - gs 是对的,它太长了。但是,我保证这不是一个长脚本:P。我不知道哪些部分足够重要,可以粘贴来说明问题......但我可以尝试总结一下:基本上它是这样写的:var1 = raw_input("Whats the module name you want to load?:") __import__ (var1)然后我在脚本运行时使用 sys.modules 检查它 - 它会打印所有已加载模块的长列表,但 var1(模块的名称)不在该列表中 - 是的,我知道它正在加载并且拼写正确:P.
-
脚本适合我。可能
list_all_mods模块会将事情连接到sys.modules(我注释掉list_all_mods以测试脚本)? -
sth - 您是在告诉脚本加载您知道尚未加载的模块吗?例如,脚本启动时会加载 sys (一个模块,duh :P),但如果你告诉我构建的函数也会“重新加载” sys - 然后如果你使用 sys.modules 检查它会显示在上面。我发现一个名为“uu”的模块是python安装的标准配置,并且通常不会在启动时导入(至少它不在我的安装或我的脚本中)-尝试加载'uu'然后检查它是否是在 sys.modules 中(在脚本中使用选项“2”)。
标签: python import operating-system sys