Укажите выходной файл cython
Кажется, что по умолчанию setup из 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"))
Ответы
Ответ 1
Вы можете передать опцию 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 за то, что он больше не кажется правильным.
Ответ 2
после инициализации расширения параметры могут быть установлены для создания c в каталоге temp.
module = Extension("temp", "temp.pyx")
module.cython_c_in_temp = True
Ответ 3
Ваш 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)