gpt4 book ai didi

Python 库发布最佳实践

转载 作者:太空狗 更新时间:2023-10-29 21:10:23 27 4
gpt4 key购买 nike

我已经使用 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)。我可以通过三种方式做到这一点。

  1. 使用基本的 setup.py 自行发布绑定(bind),并在文档中提供 C 库的构建、下载和安装说明。
  2. 发布绑定(bind)以及原始库源,并提供一个 setup.py 来处理 C 库的编译和安装。这对我来说显然是更多的工作。
  3. 只发布.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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com