2024-04-19 21:47:29 发布
网友
我正在尝试使用Cython从我们的.py文件创建.so二进制文件,并与我们的团队共享。 然而,即使我们都使用Python3,大多数情况下它应该是完全相似的修订版(让我们说3.7.8),否则我们会在导入它们时出错。 这是预期的行为吗
有些修订是兼容的。例如,如果我们使用Python3.5.2并在3.6.8中导入.so,它可以工作,但在3.7.8中不工作
这种混乱是从哪里来的?最安全的方法是什么
跟进我的意见:
在同一平台上,扩展模块应在“次要版本”内工作(即使用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版本一起使用,这是一件好事如果你正在移除这些标签,那么这一切都是你的责任
foo.cpython-37m.so
foo.so
Python现在定义了跨Python版本兼容的a more limited stable ABI。Cython正在努力支持这一点,但目前它还没有处于可用状态。在一年左右的时间里,这应该是一个很好的解决方案
总之,.so文件不能在不同的Python版本之间移植。您应该在Python版本上进行标准化,或者在本地构建.so文件
跟进我的意见:
在同一平台上,扩展模块应在“次要版本”内工作(即使用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现在定义了跨Python版本兼容的a more limited stable ABI。Cython正在努力支持这一点,但目前它还没有处于可用状态。在一年左右的时间里,这应该是一个很好的解决方案
总之,.so文件不能在不同的Python版本之间移植。您应该在Python版本上进行标准化,或者在本地构建.so文件
相关问题 更多 >
编程相关推荐