这里有很多扭曲的答案,其中一些在最新的 Python 3.10 上无法正常工作。获取脚本的完全导入模块而不是内部 __builtins__ 或sub-imports 的最佳解决方案是使用以下方法:
# import os, sys, time, rlcompleter, readline
from types import ModuleType as MT
all = [k for k,v in globals().items() if type(v) is MT and not k.startswith('__')]
", ".join(all)
# 'os, sys, time, rlcompleter, readline'
上面的结果是受@marcin上面的答案启发的,它基本上是把所有模块和全局变量结合起来:
# import os, sys, time, rlcompleter, readline
modulenames = set(sys.modules) & set(globals())
allmodules = [sys.modules[name] for name in modulenames]
for i in allmodules: print (' {}\n'.format(i))
#<module 'time' (built-in)>
#<module 'os' from 'C:\\Python310\\lib\\os.py'>
#<module 'sys' (built-in)>
#<module 'readline' from 'C:\\Python310\\lib\\site-packages\\readline.py'>
#<module 'rlcompleter' from 'C:\\Python310\\lib\\rlcompleter.py'>
还要注意 order 的导入如何也反映在 第一个 解决方案中,但不是在最后一个解决方案中。然而,模块路径也在 2nd 解决方案中给出,这对调试很有用。
PS。不确定我在这里使用了正确的词汇,所以如果我需要更正,请发表评论。