【发布时间】:2013-02-18 11:32:57
【问题描述】:
我想在实际运行脚本之前检查是否安装了脚本导入的所有模块,因为脚本非常复杂并且通常运行多个小时。此外,它可能会根据传递给它的选项导入不同的模块,因此仅运行一次可能无法检查所有内容。所以,我不希望在新系统上运行这个脚本几个小时,却因为缺少模块而在完成之前看到它失败。
显然,pyflakes 和 pychecker 在这里没有帮助,如果我错了,请纠正我。我可以这样做:
$ python -c "$(cat *.py|grep import|sed 's/^\s\+//g'|tr '\n' ';')"
但它不是很健壮,例如,如果“import”这个词出现在字符串中,它就会中断。
那么,我怎样才能正确地完成这项任务呢?
【问题讨论】:
-
简单的解决方案是将您的 grep 更改为
grep '^\s*import',因为没有 Python 行可能以 import 开头(如果我错了,请纠正我)。 -
stackoverflow.com/questions/2875232/… 可能是相关的。特别是:furius.ca/snakefood 看起来就像你想要的一样
-
@FakeRainBrigand
from <module> import <stuff>呢?不,任何基于正则表达式的解决方案都太脆弱了。最好的方法是在 AST 级别工作,而不是文本级别,这是我之前评论中链接的蛇食所做的(或至少声称,从未尝试过) -
谢谢,你是对的。我还建议您导入自己并创建一个 requirements.txt 文件,该文件允许您简单地运行
pip install并立即获取所有依赖项。 -
@FakeRainBrigand 非常感谢有关 requirements.txt 的提示,这是真正可以做的最好的事情,但是我经常处理其他人没有要求的模块/脚本。 txt,因此使用 modulefinder 的解决方案似乎是最好的。
标签: python deployment