Python 库发布最佳实践

标签 python release

我已经使用 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/

相关文章:

python - 评估Python中字串的辅音/元音组成

python - 在 python 中将负值打印为十六进制

python - 多处理 - 共享计数器显示负值

python,循环嵌套,函数,if语句

travis-ci - Travis 部署基于矩阵参数

python - 标准拟合产生不正确的拟合

asp.net - 编译调试 ="false"和 Release模式有什么区别?

azure-devops - Azure DevOps Rest API 调用版本

debugging - 调试/发布配置中的不同 iOS 应用程序设置?

android - 是否有推荐的策略来通过 Android 市场向有限数量的用户发布应用程序的测试版?