Как я могу программно обнаружить ошибки при создании яйца с помощью инструментов настройки?
-
19-09-2019 - |
Вопрос
Если у меня есть сценарий, который создает яйца, в основном путем запуска
python setup.py bdist_egg --exclude-source-files
для ряда файлов setup.py, которые используют setuptools
Чтобы определить, как строятся яйца, есть ли простой способ определить, были ли какие-либо ошибки при построении яйца?
Недавно у меня возникла ситуация: в модуле произошла синтаксическая ошибка.Setuptools выдал сообщение о стандартной ошибке, но продолжил создание яйца, не обращая внимания на сломанный модуль.Поскольку это была часть партии, создавшей несколько яиц, ошибка была пропущена, и результат оказался бесполезным.
Есть ли способ обнаружить ошибки при программном построении яйца, кроме простого захвата стандартной ошибки и ее анализа?
Решение
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...