指定cython输出文件

Mic*_* WS 22 c++ python cython

似乎默认设置来自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"))
Run Code Online (Sandbox Code Playgroud)

Dav*_*idW 15

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

# rest of file as before
setup(
      ext_modules = cythonize("example.pyx",
                              build_dir="build"))
Run Code Online (Sandbox Code Playgroud)

上面的代码将生成的c文件放在目录"build"中(这是有道理的,因为默认情况下distutils放置临时目标文件等等在构建时).


我的原始答案working不是build_dir.感谢@ArthurTacca指出那似乎不再合适.

  • 但是如何指定构建 .so 文件的路径呢? (2认同)

Mic*_* WS 10

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

 module  = Extension("temp", "temp.pyx")
 module.cython_c_in_temp = True 
Run Code Online (Sandbox Code Playgroud)


And*_*rom 7

你的 setup.py 很好。

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

python setup.py build_ext --build-lib <build directory>
Run Code Online (Sandbox Code Playgroud)

我使用以下 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)
Run Code Online (Sandbox Code Playgroud)