Если у меня есть сценарий, который создает яйца, в основном путем выполнения
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...