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指出那似乎不再合适.
Mic*_* WS 10
初始化扩展后,可以将参数设置为在临时目录中创建c.
module = Extension("temp", "temp.pyx")
module.cython_c_in_temp = True
Run Code Online (Sandbox Code Playgroud)
你的 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)