使用setuptools构建鸡蛋时,如何以编程方式检测错误?

时间:2010-02-09 16:54:37

标签: python error-handling compiler-errors setuptools

如果我有一个构建鸡蛋的脚本,基本上是通过运行

python setup.py bdist_egg --exclude-source-files

对于许多使用setuptools定义鸡蛋如何构建的setup.py文件,是否有一种简单的方法可以确定构建鸡蛋是否有任何错误?

我最近遇到的情况是模块中存在语法错误。 Setuptools向标准错误发出消息,但继续创建egg,省略了破坏的模块。因为这是批量创建一些鸡蛋的一部分,所以错过了错误,结果毫无用处。

有没有办法在以编程方式构建egg时检测错误,而不仅仅是捕获标准错误并解析它?

1 个答案:

答案 0 :(得分:5)

distutils使用py_compile.compile()函数编译源文件。此函数采用doraise参数,当设置为True时会引发编译错误的异常(默认情况下是将错误打印到stderr)。 distutils不要使用py_compile.compile()调用doraise=True,因此编译错误不会中止编译。

要停止错误并能够检查setup.py返回代码(错误时它将非零),您可以修补py_compile.compile()函数。例如,在setup.py

from setuptools import setup
import py_compile

# Replace py_compile.compile with a function that calls it with doraise=True
orig_py_compile = py_compile.compile

def doraise_py_compile(file, cfile=None, dfile=None, doraise=False):
    orig_py_compile(file, cfile=cfile, dfile=dfile, doraise=True)

py_compile.compile = doraise_py_compile

# Usual setup...