指定 cython 输出文件
Specify cython output file
似乎默认设置从 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"))
您可以将选项 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 指出这似乎不再是正确的。
初始化一个Extension后,可以设置参数在temp目录下创建c。
module = Extension("temp", "temp.pyx")
module.cython_c_in_temp = True
你的 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)
似乎默认设置从 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"))
您可以将选项 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 指出这似乎不再是正确的。
初始化一个Extension后,可以设置参数在temp目录下创建c。
module = Extension("temp", "temp.pyx")
module.cython_c_in_temp = True
你的 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)