【问题标题】:How to keep backward compatibility of the dynamic library embed C(.so file) between different Python versions如何保持动态库嵌入 C(.so 文件) 在不同 Python 版本之间的向后兼容性
【发布时间】:2014-07-07 03:09:25
【问题描述】:

我的程序需要导入xxx.so,而这个xxx.so文件是在Python2.4下编译的。

我想在Python2.7&Python2.4下运行我的程序,但是在Python2.7下import xxx.so时出错,我知道是与Python版本不匹配造成的。

我的问题:我应该编译 xxx.so 文件以匹配每个 Python 版本吗?

【问题讨论】:

    标签: python c embed compatibility


    【解决方案1】:

    C 扩展模块是特定于版本的。每个不同版本的 Python 都需要不同版本的扩展模块。您需要根据目标 Python 版本的标头和库从源链接编译扩展模块。

    【讨论】:

    • 解决这个问题的正常方法是什么?包含所有的xxx.so文件,并使用sys.version来决定是否导入对应的文件?
    • 正常的解决方案是从源代码构建,或者为不同的python版本提供不同的二进制安装包
    【解决方案2】:

    是的,您应该使用匹配的 Python 版本使用相同的编译器对其进行编译,以确保 ABI 兼容性。

    在 *nix 平台上这不是问题,编译器与操作系统捆绑在一起,但在使用许多不同编译器(mingw、visual studio 等)的 Windows 上可能会让您头疼。

    Python C API 文档描述了官方构建使用的编译器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-04
      • 1970-01-01
      • 2012-03-03
      相关资源
      最近更新 更多