Python库发布最佳实践

时间:2011-03-08 20:26:20

标签: python release

我使用ctypes为units library编写了Python绑定。绑定本身只有~100行Python。该库有一个不必要的(为了Python绑定的目的)依赖于tcl,如果没有tcl,配置脚本将失败。但是,使用gcc -Wl,-soname,units.so -o units.so -fPIC -shared units.c可以很好地构建库。

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

  1. 使用基本的setup.py自行发布绑定,并在文档中提供C库的构建,下载和安装说明。
  2. 释放绑定以及原始库源,并提供一个处理C库编译和安装的setup.py。这对我来说显然更有用。
  3. 只需发布.py文件,让用户担心安装和依赖。
  4. 如果我选择选项2,我应该在哪里放置库?我应该把它放在与.py文件相同的目录中,允许我假设lib_name = CDLL('./units.extension'),还是应该把它放在一个往往在链接器路径中的目录(比如/ lib)?另外,对于Windows机器,这通常如何处理,a)可能没有C编译器,b)没有标准位置来放置共享库?

    这些选项中哪一个是首选的,我该如何处理Windows案例?

1 个答案:

答案 0 :(得分: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)]
    )