自定义 Cython 生成的 .so 文件的位置

Customize location of .so file generated by Cython

我有一个带有 C 库包装器的 Cython 包。这是包的树结构

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

正在做

python setup.py build_ext --inplace

_wrap.so 文件放在顶层 package/ 目录中,这在大多数情况下通常是必需的。但是,我的 wrap.py 需要 package/wrapper/ 目录中的 _wrap.so。我想知道是否有一种方法 setup.py 可以在所需位置自行创建 .so 文件,而无需手动将其复制并粘贴到该位置。

生成的 .so 文件的输出文件夹可以指定为 setuptools.Extension 函数的第一个参数。

这是一个 Cython 扩展的例子,

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,
     )