指定cython输出fi

2024-09-28 23:22:45 发布

您现在位置:Python中文网/ 问答频道 /正文

默认情况下,distutils.core中的安装程序将cmdclass设置为build_ext,编译当前工作目录中的cpp或c文件。有没有办法确定生成的c代码被写到哪里?否则,存储库中会散落生成的代码。

例如,此文件setup.py会将文件example.c写入当前工作目录:

from distutils.core import setup
from Cython.Build import cythonize

setup(
      ext_modules = cythonize("example.pyx"))

Tags: 文件代码fromcoreimportbuild目录example
3条回答

你的setup.py很好。

要将其构建到不同的位置,请按以下方式调用python:

python setup.py build_ext --build-lib <build directory>

我使用以下生成规则自动执行此操作:

python_lib_dir=src/lib

cython_output = $(patsubst $(python_lib_dir)/%.pyx,$(python_lib_dir)/%.so, $(shell find $(python_lib_dir) -name '*.pyx'))

$(cython_output):%.so:%.pyx      
    python setup.py build_ext --build-lib $(python_lib_dir)

您可以将选项build_dir="directory name"传递给Cythonize

# rest of file as before
setup(
      ext_modules = cythonize("example.pyx",
                              build_dir="build"))

上面的代码将把生成的c文件放在“build”目录中(这是有意义的,因为在默认情况下,distutils在构建时放置临时对象文件等)。


我最初的答案是working,而不是build_dir。感谢@ArthurTacca指出这似乎不再是正确的。

初始化扩展后,可以将参数设置为在temp目录中创建c。

 module  = Extension("temp", "temp.pyx")
 module.cython_c_in_temp = True 

相关问题 更多 >