编译(但不运行)一个Python脚本

119

我想检查脚本中的语法错误。在2.x和3.x中,我如何编译脚本而不运行它?


@sukhbir:你说得对,但我刚刚意识到答案,并且那个帖子中没有给出。 - asmeurer
@asmeurer:是的,你发布的答案就在那个问题里。 - Falmarri
2
编译和语法检查是两回事。如果你想进行语法检查,答案已经在另一个帖子中了。你现在问的是如何编译它,这是一个不同的问题,你应该真正地改变话题。 - Lennart Regebro
2
使用pylint或pyflakes会比编译发现更多的问题。 - Lennart Regebro
这是真的,但也只是时间问题。 - Lennart Regebro
显示剩余3条评论
4个回答

400
python -m py_compile script.py

1
谢谢。这太棒了!比@Greg Hewgills的版本容易记多了 ;) - Daren Thomas
8
这应该被接受为答案。 - S. Salman
正是我所期望的 - 谢谢 - Robert Achmann
你可以使用findxargs进一步扩展它来检查目录。以下是在您的src/目录上运行它的方法: find src -type f -name '*.py' | xargs -n1 python3 -m py_compile - stealthybox
文档:https://docs.python.org/3/using/cmdline.html#using-on-cmdline 和 https://docs.python.org/3/library/py_compile.html(特别是查看关于'main()'的讨论)。 - Alan
这是一个很好的答案,但请注意有一个类似的命令 python -m compileall some/dir/,它会递归编译,而不像 py_compile - spagh-eddie

54

7
在使用这种方法之前,请查看Mark Johnson的高票答案,使其变为命令行执行而无需额外的Python。 - erik258

17

您可以使用Pylint来查找语法错误,以及更加微妙的错误,如在某些很少使用的条件分支中访问未定义的变量。


9

有一种方法是这样做(针对 test.py):

python -c "__import__('compiler').parse(open('test.py').read())"

这适用于Python 2.x版本。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接