打包包含C共享库的Python库的最佳方法是什么?

obe*_*tie 15 c python distutils

我编写了一个库,其主要功能是用C语言实现的(速度很关键),周围有一个很薄的Python层来处理ctypes恶意.

我要打包它,我想知道我最好怎么做.它必须与之交互的代码是一个共享库.我有一个Makefile,它构建C代码并创建.so文件,但我不知道如何通过distutils编译它.我是不是应该调出makesubprocess通过重写install命令(如果有的话,就是install这个地方,或者是build比较合适?)

更新:我想要注意,这不是 Python扩展.也就是说,C库不包含自己与Python运行时交互的代码.Python正在对直接C共享库进行外部函数调用.

Elm*_*lmo 0

鉴于您遵循了有关如何用 C 创建 Python 扩展的说明,您应该像本文档中那样加入扩展模块。
所以setup.py你的库的脚本应该是这样的:

from distutils.core import setup, Extension
setup(
   name='your_python_library',
   version='1.0',
   ext_modules=[Extension('your_c_extension', ['your_c_extension.c'])],
)
Run Code Online (Sandbox Code Playgroud)

distutils知道如何将扩展编译为 C 共享库以及将其放在哪里。

当然,我没有关于您的库的更多信息,因此您可能想添加更多参数来setup(...)调用。

  • 它不是 Python 扩展。这是一个纯 C 库(它本身不包含与 Python 运行时交互的代码),但 Python 通过 [`ctypes`](https://docs.python.org/2/library/ctypes.html 调用它)。有可能将 C 共享库包装在 Python 扩展模块中,但我更愿意保留当前的“ctypes”方法。 (12认同)