【问题标题】:Python library release best practicesPython 库发布最佳实践
【发布时间】:2011-07-11 09:49:34
【问题描述】:

我已经使用 ctypes 为 units library 编写了 Python 绑定。绑定本身只有大约 100 行 Python。该库对 tcl 有不必要的依赖(出于 Python 绑定的目的),如果 tcl 不存在,配置脚本将失败。但是,使用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)?此外,对于 a) 可能没有 C 编译器和 b) 没有放置共享库的标准位置的 Windows 机器,这通常是如何处理的?

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

【问题讨论】:

  • 这只是个人意见,但我只是释放绑定(如果以包形式释放它们,只需为原始库添加对包的依赖即可)。

标签: python release


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    • 2018-03-11
    相关资源
    最近更新 更多