我已经使用 ctypes 为 units library 编写了 Python 绑定(bind).绑定(bind)本身只有大约 100 行 Python。该库对 tcl 有不必要的(出于 Python 绑定(bind)的目的)依赖性,如果没有 tcl,配置脚本将失败。但是,使用 gcc -Wl,-soname,units.so -o units.so -fPIC -shared units.c
可以很好地构建库。
我现在想释放这些绑定(bind)。我可以通过三种方式做到这一点。
- 使用基本的 setup.py 自行发布绑定(bind),并在文档中提供 C 库的构建、下载和安装说明。
- 发布绑定(bind)以及原始库源,并提供一个 setup.py 来处理 C 库的编译和安装。这对我来说显然是更多的工作。
- 只发布.py文件,让用户省心安装和依赖。
如果我选择选项 2,我应该把图书馆放在哪里?我应该将它放在与 .py 文件相同的目录中,允许我假设 lib_name = CDLL('./units.extension')
,还是应该将它放在一个目录中在链接器的路径中(如/lib)?此外,对于 a) 可能没有 C 编译器和 b) 没有放置共享库的标准位置的 Windows 机器,这通常是如何处理的?
以下选项中哪一个是首选选项?我应该如何处理 Windows 案例?
最佳答案
看来 units
库已经 5 年多没有修改了,所以选项 2 可能是最好的。主要发行版之一也不太可能将其打包(例如,我无法在 Ubuntu Lucid 或 Macports 中找到它)。
例如,将 units.c 和 units.h 复制到您的项目中并创建一个 setup.py 来编译和部署它以及您的绑定(bind):
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)]
)
关于Python 库发布最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5237915/