使用distutils安装扩展模块、纯Python模块和共享库的混合体

3 投票
1 回答
1466 浏览
提问于 2025-04-16 22:54

我正在使用cython来构建一个扩展模块。这个模块依赖于一个外部的共享库,这个库在模块构建时会被找到。此外,我在同一个目录下还有一些纯Python模块。

有没有人能给我一个这个任务的setup.py示例?我在使用“python setup.py install”命令时,遇到了一些问题,无法把扩展模块、纯Python模块和共享库放在同一个目录里。

1 个回答

1

我找到了解决办法:我有一个叫 ABC 的文件夹,里面放着我的包,结构如下:

ABC/
    __init__.py
    A.py
    B.pyx
    C.so             (or C.dll and C.lib on win)

然后下面这个 setup.py 文件就能完成任务:

#input-encoding: utf-8
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext

setup(
  name = "ABC",
  packages = ["ABC"],
  package_dir = { "ABC" : "." },
  ext_package = "ABC",
  cmdclass = {'build_ext': build_ext},
  package_data = { ".": [ "C.dll"] },
  ext_modules = [ Extension("B", sources="B.pyx", libraries="C" ) ]
)

我需要把 setup.py 放在 ABC/ 文件夹里,并通过 package_dir = { "ABC" : "." }, 来进行指向。

撰写回答