5

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

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

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

我最近遇到的一种情况是模块中存在语法错误。Setuptools 在标准错误上吐出一条消息,但继续创建鸡蛋,省略损坏的模块。因为这是一批创建多个鸡蛋的一部分,所以错过了错误,结果是无用的。

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

4

1 回答 1

5

distutils使用该py_compile.compile()函数编译源文件。这个函数有一个doraise参数,当设置为True编译错误时会引发异常(默认是将错误打印到 stderr)。distutils不要调用py_compile.compile()with 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...
于 2010-02-10T21:39:31.490 回答