Python库发布的最佳实践

8
我已经使用ctypes为units library编写了Python绑定。这些绑定本身只有约100行Python代码。该库在Python绑定方面有一个不必要的依赖项tcl,并且如果tcl不存在,则configure脚本会失败。然而,使用gcc -Wl,-soname,units.so -o units.so -fPIC -shared units.c可以很好地构建该库。
现在我想发布这些绑定。我有三种方法可以做到这一点。
  1. 单独发布这些绑定,提供基本的setup.py,并在文档中提供C库的构建、下载和安装说明。
  2. 同时发布绑定和原始库源代码,并提供一个setup.py来处理C库的编译和安装。这显然需要更多的工作。
  3. 只发布.py文件,让用户自己担心安装和依赖关系。
如果我选择选项2,应该把库放在哪里?我应该把它放在与 .py 文件相同的目录中,这样我就可以假设 lib_name = CDLL('./units.extension'),还是应该将其放在链接器路径通常存在的目录中(如 /lib)?此外,对于可能没有 C 编译器并且没有标准共享库位置的 Windows 系统,通常如何处理?
其中哪个选项是首选,并且对于 Windows 情况应该怎么做?

这只是个人意见,但我会仅发布绑定(如果以包的形式发布它们,则只需在原始库的包上添加依赖项)。 - Amber
1个回答

2
似乎 units 库已经超过5年没有更新了,所以选项2可能是最好的选择。此外,也不太可能有一个主要的发行版会打包它(例如,在Ubuntu Lucid或Macports中找不到它)。
例如,将 units.c 和 units.h 复制到您的项目中,并创建一个 setup.py 来编译和部署它以及您的绑定:
from setuptools import setup, Extension

sources = ['src/units.c']
ext_opts = {'extra_compile_args': ['-Wl,-soname,units.so', '-Isrc']}

setup(
    name='units',
    ext_modules = [Extension('units', sources, **ext_opts)]
    )

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接