Python Cython基于通过`setuptools'给出的外部值进行条件编译`
我尝试从Cython pyx文件有条件地生成C代码。我在Cython文档中发现,我可以使用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
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={}