我尝试从Cython pyx文件条件生成C代码。我在Cython文档中发现可以使用
谢谢!
DEF
定义一个值和IF
根据定义的值有条件地生成代码,但是我如何通过setuptools
中的Extension
从setup.py
设置该值。谢谢!
DEF
定义一个值和IF
根据定义的值有条件地生成代码,但是我如何通过setuptools
中的Extension
从setup.py
设置该值。感谢提供链接。
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
...
pyrex_compile_time_env
而不是cython_compile_time_env
。还值得注意的是,如果您的setuptools目录无法以不明显的方式清除,则构建新的编译时变量将只使用先前缓存的结果。即使使用python setup.py clean --all
也无法避免这种情况。我最终只是在每次构建之前touch
了我的.pyx
文件。 - dubiousjimcythonize
函数的用户相关:https://github.com/cython/cython/issues/1572 - 0 _cythonize
参数compile_time_env
的示例用法:https://github.com/pywr/pywr/blob/80784dfbe1aa0fc143247f4304c5f5eaa0dd3809/setup.py#L151 - 0 _class custom_build_ext(build_ext): ... def build_extensions(self): self.cython_compile_time_env = {}
),您可能希望稍后修改环境(只是一个字典)。 - Fred Schoen