2010-02-09 6 views
5

나는 기본적으로 계란을 구축하는 방법을 정의 할 setuptools를 사용 setup.py 파일의 번호setuptools로 달걀을 만들 때 어떻게 프로그램 적으로 오류를 감지 할 수 있습니까?

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

을 실행하여, 계란을 빌드 스크립트가있는 경우, 어떤 거기 있는지 확인하는 쉬운 방법이 달걀을 짓는데 오류가 있습니까?

최근에 내가 가진 상황은 모듈에 구문 오류가 있다는 것입니다. Setuptools는 메시지를 표준 오류로 내보내지만 깨진 모듈에서는 생략하여 달걀을 계속 만들었습니다. 이것은 수많은 계란을 만드는 일괄 처리의 일부이기 때문에 오류가 누락되어 그 결과는 쓸모가 없었습니다.

표준 오류를 캡처하고 구문 분석하는 것 외에 프로그래밍 방식으로 달걀을 작성할 때 오류를 감지하는 방법이 있습니까?

답변

5

distutils 소스 파일을 컴파일하는 데 py_compile.compile() 함수를 사용하십시오. 이 함수는 인수를 취합니다. True으로 설정하면 컴파일 오류에 대한 예외가 발생합니다 (기본값은 오류를 표준 오류로 인쇄하는 것입니다). distutilspy_compile.compile()doraise=True으로 호출하지 않으므로 컴파일 오류가 발생해도 컴파일이 중단되지 않습니다.

오류가 발생하지 않도록하고 setup.py 리턴 코드 (오류시 0이 아닌 값)를 확인할 수 있으려면 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... 
+0

우수 작품! 이것은 setuptools/distutils가 직접 지원할 것으로 기대하는 것과 같습니다. – SpoonMeiser