【问题标题】:How to safely create and import .so files in Python 3?如何在 Python 3 中安全地创建和导入 .so 文件?
【发布时间】:2020-11-19 15:00:13
【问题描述】:

我正在尝试使用 Cython 从我们的 .py 文件创建 .so 二进制文件并与我们的团队共享。 然而,即使我们都使用 Python3,大多数时候它应该是完全相同的修订版(比如 3.7.8),否则我们会在导入它们时出错。 这是预期的行为吗?

某些版本是兼容的。例如,如果我们使用 python 3.5.2 制作 .so 并在 3.6.8 中导入,它可以工作,但在 3.7.8 中不起作用

这种混乱从何而来,最安全的方法是什么?

【问题讨论】:

标签: python cython compatibility .so


【解决方案1】:

跟进我的 cmets:

  • 在同一平台上,扩展模块应该在“次要版本”中工作(即使用 3.7.2 和 3.7.3 构建的模块应该兼容)。不过,我正在努力寻找这个来源。除此之外,过去已经做出了一些努力来确保版本之间的兼容性,但是 not so much any more 所以你可能很幸运并且一切正常。

  • distutils/setuptools 和其他类似的构建机制tag extension modules with a suffix indicating the version and some other details。例如,扩展名将被称为foo.cpython-37m.so 而不仅仅是foo.so。这些标签会阻止模块与其他 Python 版本一起使用,这是一件好事。 如果你要删除这些标签,那么这个烂摊子就完全在你身上了

  • Python 现在定义了a more limited stable ABI,它应该在 Python 版本之间兼容。 Cython 正在努力支持这一点,但目前它还没有处于可用状态。一年左右应该是一个很好的解决方案。

总之,.so 文件不应该在不同的 Python 版本之间移植。您应该标准化 Python 版本或在本地构建 .so 文件。

【讨论】:

  • 谢谢你们!这就是我需要知道的!我的印象是这个 .so 文件完全兼容!但现在我可以更好地计划,尽量不要把事情搞砸!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-21
  • 1970-01-01
  • 1970-01-01
  • 2012-06-14
相关资源
最近更新 更多