如何在不运行脚本的情况下检查是否安装了Python脚本导入的所有模块?

时间:2013-03-04 11:31:35

标签: python deployment

我想检查脚本导入的所有模块是否在我实际运行脚本之前安装,因为脚本非常复杂并且通常运行很多个小时。此外,它可能会导入不同的模块,具体取决于传递给它的选项,因此只运行一次可能无法检查所有内容。所以,我不想在新系统上运行这个脚本几个小时,只是因为缺少模块而在完成之前看到它失败了。

显然,pyflakes和pychecker在这里没有用,如果我错了,请纠正我。我可以这样做:

$ python -c "$(cat *.py|grep import|sed 's/^\s\+//g'|tr '\n' ';')"

但它不是很强大,例如,如果“import”一词出现在字符串中,它就会破坏。

那么,我该如何正确完成这项任务呢?

2 个答案:

答案 0 :(得分:6)

您可以使用标准lib modulefinder 中的 ModuleFinder 使用docs

中的示例
from modulefinder import ModuleFinder
finder = ModuleFinder()
finder.run_script('bacon.py')

print 'Loaded modules:'
for name, mod in finder.modules.iteritems():
    print '%s: ' % name,
    print ','.join(mod.globalnames.keys()[:3])

print '-'*50
print 'Modules not imported:'
print '\n'.join(finder.badmodules.iterkeys())

答案 1 :(得分:1)

您可以编写一个仅包含所有可能导入的test.py,例如:

import these
import are
import some
import modules

运行它,如果有任何问题,python会让你知道