2011-03-08 65 views
8

我已经使用ctypes编写了units library的Python绑定。绑定本身只有100行Python。该库有一个不必要的(用于Python绑定的目的)依赖于tcl,并且如果tcl不存在,配置脚本将失败。但是,该库建立与gcc -Wl,-soname,units.so -o units.so -fPIC -shared units.c罚款。Python库发布最佳实践

我现在想释放这些绑定。有三种方法可以做到这一点。

  1. 使用基本的setup.py自行释放绑定,并为文档中的C库提供构建,下载和安装说明。
  2. 释放绑定以及原始库源,并提供一个setup.py来处理C库的编译和安装。这对我来说显然是更多的工作。
  3. 只需发布.py文件,让用户担心安装和依赖关系。

如果我选择选项2,我应该在哪里放置库?我应该把它放在与.py文件相同的目录下,允许我假设lib_name = CDLL('./units.extension'),或者我应该把它放在一个通常位于链接器路径中的目录中(比如/ lib)?另外,对于Windows机器来说,这通常是如何处理的:a)可能没有C编译器,b)没有标准的放置共享库的地方?

以下哪个选项是首选项,我应该如何处理Windows病例?

+0

这只是个人意见,但我d只是释放绑定(并且如果以包的形式发布它们,只需添加对原始库的包的依赖)。 – Amber 2011-03-08 20:29:54

回答

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