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

1 投票
2 回答
2293 浏览
提问于 2025-04-17 17:51

我想在运行一个脚本之前,检查一下这个脚本所需要的所有模块是否都已经安装好了。因为这个脚本比较复杂,通常需要运行很多小时。而且,根据传递给它的选项,它可能会导入不同的模块,所以仅仅运行一次可能无法检查到所有模块。因此,我不想在新系统上运行这个脚本几个小时,结果却因为缺少某个模块而没法完成。

显然,pyflakes和pychecker在这方面并没有什么帮助,如果我错了请纠正我。我可以这样做:

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

但这样的方法不太可靠,如果字符串中出现了“import”这个词,它就会出问题。

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

2 个回答

0

你可以写一个叫做 test.py 的文件,里面包含所有可能需要导入的内容,比如:

import these
import are
import some
import modules

运行这个文件,如果有任何问题,Python会告诉你。

7

你可以使用标准库中的 ModuleFinder,它来自 modulefinder 这个模块。可以参考一下这个 文档 中的例子。

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())

撰写回答