2014-12-03 1 views
3

Cython pyx 파일에서 조건부로 C 코드를 생성하려고합니다. Cython 문서에서 값을 정의하기 위해 DEF을 사용하고 정의 된 값을 기반으로 조건부로 코드를 생성하려면 IF을 사용할 수 있지만 setup.py에서 값을 설정하는 방법은 에서 Extension입니다.`setuptools`를 통해 주어진 외부 값을 기반으로하는 Cython 조건부 컴파일

감사합니다.

+1

당신이 찾고있는 것은 [이 답변]에 나와 있습니다 (http://stackoverflow.com/questions/26225187/try-statement-in-cython-for-cimport-for-use-with-mpi4py/26226758#). 26226758). – IanH

답변

2

감사합니다.

setup.py의 흥미로운 플래그는 cython_compile_time_env입니다. Cython에서 Extension을 가져 오십시오.

from setuptools import setup 
from Cython.Distutils.extension import Extension 

ext = Extension(
    name, 
    include_dirs=include_dirs, 
    cython_compile_time_env=dict(OPENMP=True), 
    sources=['test.pyx']) 

setup(name=name, 
     cmdclass=dict(build_ext=build_ext), 
     ext_modules=[ext]) 

그리고 test.pyx에서

:

... 
IF OPENMP: 
#Do openmp 
ELSE: 
#No openmp 
... 

사이 썬 조건문 (위 IF...ELSE)는 here를 설명되어 있습니다.

+1

[Cython에 추가 된이 기능에 대한 보고서] (https://github.com/cython/cython/pull/81)입니다. 그것은 잘 문서화되지 않았습니다. 'cython_compile_time_env' 대신'pyrex_compile_time_env' 키워드를 사용하는 경우가 있습니다. 또한 알 수있는 점은 setuptools 디렉토리가 명확하지 않은 방식으로 깨끗하지 못하면 새로운 컴파일 시간 변수가 될 것으로 예상되는 것을 다시 빌드하면 이전에 캐싱 된 결과 만 표시된다는 것입니다. 'python setup.py clean --all'조차 이것을 피하지 않았습니다. 나는 각 빌드 전에 내'.pyx' 파일을'만지기 '만했다. – dubiousjim

+0

'cythonize' 함수의 사용자와 관련이있다 : https://github.com/cython/cython/issues/1572 –

+0

'cythonize'의'compile_time_env' 인자의 사용 예 : https://github.com/pywr /pywr/blob/80784dfbe1aa0fc143247f4304c5f5eaa0dd3809/setup.py#L151 –

관련 문제