distutils.util.get_platform() 的替代方案是什么?

6

显然,Python 3.10 / 3.12 将弃用 / 删除 distutils。

不幸的是,我没有找到替换它中唯一一个我正在使用的函数 distutils.util.get_platform() 的办法。有什么替代方法吗?

请注意,platform 不是答案。我需要一个返回完整字符串的函数,该字符串在构建二进制轮时使用,例如 macosx-12-x86_64。特别要注意,其中似乎嵌入了特定于平台的逻辑(例如,我所知道的获取 macos 版本的另一种方法是使用 macos 特定的 API)。

(¹ 如评论中所述,严格来说,distutils.util.get_platform() 并不是那个函数。但是,PEP 425 规定“平台标签只是将所有连字符 - 和句点 . 替换为下划线 _distutils.util.get_platform()。”因此,从 distutils.util.get_platform() 推导标签是直接的和与平台无关的。因此,可接受的答案可以直接给出一个经过批准的公共 API,该 API 直接生成平台标记,或者提供一个 distutils.util.get_platform() 的兼容替代品。)


根据这个讨论,似乎没有人知道? - Matthew
1个回答

9

这是否保证在 macOS 上会得到相同的结果?这个讨论似乎并没有暗示它会? - Matthew
2
@Matthew 在代码层面上,“sysconfig.get_platform”和“distutils.util.get_host_platform”的代码有99%的相似度。对于Windows系统,distutils还会检查“os.environ.get('VSCMD_ARG_TGT_ARCH')”。严格来说,目前不能保证完全相同的结果,但这已经是最接近的结果了。 - Mike Scotty
@Matthew,你的问题标题和问题正文询问了两件不同的事情,或者你一开始使用了错误的函数 - bdist_wheel标签的确切替换应该是from wheel.bdist_wheel import get_platform,它对sysconfig / distutils.util函数的结果进行了进一步修改。然而,wheel没有公共API(正如他们的README中明确说明的那样),因此如果你想要一个精确的替代方案,你可能需要手动复制他们的修改。 - wim
好的观点。我添加了解释性文字来说明差异以及为什么您的答案尽管存在这样的差异也是可以接受的。 - Matthew
1
说到这一点,事实证明distutils.util.get_platform/sysconfig.get_platform确实与wheel中使用的实际标签不匹配。PEP 425也就无从谈起了。 - Matthew
2
这个 PEP 已经快10年了,所以如果事情有所变化并需要更新,那也就不足为奇了。 - wim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接