指定 Cython 输出文件

问题描述 投票:0回答:3

似乎默认情况下,从 distutils.core 设置为 build_ext,将 cmdclass 设置为当前工作目录中的 .cpp.c 文件。有没有办法确定生成的 C 代码写入何处?否则,存储库将充斥着生成的代码。

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

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

setup(
      ext_modules = cythonize("example.pyx"))
python c++ cython
3个回答
21
投票

您可以将选项

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 指出这似乎不再正确。


14
投票

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

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

8
投票

你的 setup.py 没问题。

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

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

我使用以下 make 规则来自动执行此操作:

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)
© www.soinside.com 2019 - 2024. All rights reserved.