Skip to content Skip to sidebar Skip to footer

Specify Cython Output File

It seems that by default setup from distutils.core with cmdclass set to build_ext, compiles a cpp or c file in the current working directory. Is there a way to determine where th

Solution 1:

You can pass the option build_dir="directory name" to Cythonize

# rest of file as before
setup(
      ext_modules = cythonize("example.pyx",
                              build_dir="build"))

The above code will put the generated c files in the directory "build" (which makes sense, since by default it's where distutils puts temporary object files and so forth when it's building).


My original answer had working, not build_dir. Thanks to @ArthurTacca for pointing out that that no longer seems to be right.

Solution 2:

after initializing an Extension, the parameters can be set to create c in temp directory.

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

Solution 3:

Your setup.py is fine.

To get it to build to a different location, invoke python in the following way:

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

I use the following make rules to automate this:

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)

Post a Comment for "Specify Cython Output File"