Как я могу обнаруживать ошибки программно при создании яйца с помощью setuptools? - PullRequest
5 голосов
/ 09 февраля 2010

Если у меня есть скрипт, который строит яйца, в основном, запустив

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

Для ряда файлов setup.py, которые используют setuptools, чтобы определить, как строятся яйца, существует ли простой способ определить, были ли какие-либо ошибки при создании яйца?

Недавно у меня возникла ситуация, когда в модуле произошла синтаксическая ошибка. Setuptools выдал сообщение о стандартной ошибке, но продолжил создавать яйцо, пропуская сломанный модуль. Поскольку это было частью партии, в которой было создано несколько яиц, ошибка была пропущена, а результат оказался бесполезным.

Есть ли способ обнаружить ошибки при программном построении яйца, кроме как просто зафиксировать стандартную ошибку и проанализировать ее?

1 Ответ

5 голосов
/ 11 февраля 2010

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...
...