Cython pyx 파일에서 조건부로 C 코드를 생성하려고합니다. Cython 문서에서 값을 정의하기 위해 DEF
을 사용하고 정의 된 값을 기반으로 조건부로 코드를 생성하려면 IF
을 사용할 수 있지만 setup.py
에서 값을 설정하는 방법은 에서 Extension
입니다.`setuptools`를 통해 주어진 외부 값을 기반으로하는 Cython 조건부 컴파일
감사합니다.
Cython pyx 파일에서 조건부로 C 코드를 생성하려고합니다. Cython 문서에서 값을 정의하기 위해 DEF
을 사용하고 정의 된 값을 기반으로 조건부로 코드를 생성하려면 IF
을 사용할 수 있지만 setup.py
에서 값을 설정하는 방법은 에서 Extension
입니다.`setuptools`를 통해 주어진 외부 값을 기반으로하는 Cython 조건부 컴파일
감사합니다.
감사합니다.
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를 설명되어 있습니다.
[Cython에 추가 된이 기능에 대한 보고서] (https://github.com/cython/cython/pull/81)입니다. 그것은 잘 문서화되지 않았습니다. 'cython_compile_time_env' 대신'pyrex_compile_time_env' 키워드를 사용하는 경우가 있습니다. 또한 알 수있는 점은 setuptools 디렉토리가 명확하지 않은 방식으로 깨끗하지 못하면 새로운 컴파일 시간 변수가 될 것으로 예상되는 것을 다시 빌드하면 이전에 캐싱 된 결과 만 표시된다는 것입니다. 'python setup.py clean --all'조차 이것을 피하지 않았습니다. 나는 각 빌드 전에 내'.pyx' 파일을'만지기 '만했다. – dubiousjim
'cythonize' 함수의 사용자와 관련이있다 : https://github.com/cython/cython/issues/1572 –
'cythonize'의'compile_time_env' 인자의 사용 예 : https://github.com/pywr /pywr/blob/80784dfbe1aa0fc143247f4304c5f5eaa0dd3809/setup.py#L151 –
당신이 찾고있는 것은 [이 답변]에 나와 있습니다 (http://stackoverflow.com/questions/26225187/try-statement-in-cython-for-cimport-for-use-with-mpi4py/26226758#). 26226758). – IanH