Customize location of .so file generated by Cython
Asked Answered
I

1

19

I have a Cython package with wrappers of a C library. This is the tree structure of the package

package/
       _api.pxd
       _wrap.pyx
       setup.py
       wrapper/
              __init__.py
              wrap.py

Doing

python setup.py build_ext --inplace

puts the _wrap.so file in the top-level package/ directory which is normally required in most cases. However, my wrap.py needs the _wrap.so in the package/wrapper/ directory. I was wondering if there's a way in which setup.py could create the .so file in the desired place by itself without manually copying and pasting it in the location.

Interventionist answered 25/6, 2015 at 7:21 Comment(0)
S
21

The output folder for the produced .so files can be specified as the first argument of setuptools.Extension function.

Here is an example for Cython extensions,

from setuptools import setup, find_packages, Extension
from Cython.Distutils import build_ext

ext_modules=[
    Extension("package.wrapper.wrap",    # location of the resulting .so
             ["package/wrapper/wrap.pyx"],) ]


setup(name='package',
      packages=find_packages(),
      cmdclass = {'build_ext': build_ext},
      ext_modules = ext_modules,
     )
Seaman answered 25/6, 2015 at 9:30 Comment(2)
Well, that helped. Earlier I was trying "package/wrapper/wrap". God knows why wasn't it building.Interventionist
what if i want to put it on particular path like venv/lib/python/site-packages/package/ ?Panada

© 2022 - 2024 — McMap. All rights reserved.