Python Cython基于通过`setuptools'给出的外部值进行条件编译`

Python Cython基于通过`setuptools'给出的外部值进行条件编译`,python,cython,setuptools,conditional-compilation,Python,Cython,Setuptools,Conditional Compilation,我尝试从Cython pyx文件有条件地生成C代码。我在Cython文档中发现,我可以使用DEF定义一个值和IF根据定义的值有条件地生成代码,但是如何通过setuptools中的Extension从setuptools设置中的setup.py值 谢谢你谢谢你的链接 setup.py中有趣的标志是cython\u compile\u time\u env。并从Cython导入扩展名 from setuptools import setup from Cython.Distutils.extensi

我尝试从Cython pyx文件有条件地生成C代码。我在Cython文档中发现,我可以使用
DEF
定义一个值和
IF
根据定义的值有条件地生成代码,但是如何通过
setuptools
中的
Extension
setuptools
设置
中的
setup.py


谢谢你

谢谢你的链接

setup.py
中有趣的标志是
cython\u compile\u time\u env
。并从Cython导入
扩展名

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
...

Cython条件语句(
IF…ELSE
以上)已记录在案。

中显示了您要查找的内容。以下是。它没有很好的记录。有时人们被告知使用关键字
pyrex\u compile\u time\u env
,而不是
cython\u compile\u time\u env
。另外值得一提的是,如果您的setuptools目录无法以不明显的方式保持干净:那么使用您期望的新编译时变量重新构建将只与以前缓存的结果相匹配。即使是
python setup.py clean--all
也没有避免这一点。在每次构建之前,我只需触摸一下我的
.pyx
文件。与函数
cythonize
的用户相关:以及
cythonize
的参数
compile\u time\u env
的示例用法:在更复杂的设置中,您可能需要修改环境(只是一个命令)在以后的阶段,当您有更多类似于以下内容的信息时,
class custom\u build\u ext(build\u ext):。。。def build_extensions(self):self.cython_compile_time_env={}