【问题标题】:Python 3.4 pip install wheel fails on Yosemite - "not a supported wheel on this platform"Python 3.4 pip install wheel 在 Yosemite 上失败 - “此平台上不受支持的滚轮”
【发布时间】:2015-01-28 00:24:00
【问题描述】:

我一直在尝试使用 Yosemite 和全新安装的 ActiveState Python 3.4 在 MacBook Pro 上安装 numpy、pysci 等。我尝试了许多轮文件,但都以“此平台上不支持轮子”而失败。例如,使用来自https://pypi.python.org/pypi/numpy 的 Python 3.4 的最新 Wheel 文件:

...$ sudo pip3 install numpy-1.9.1-cp34-cp34m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl

numpy-1.9.1-cp34-cp34m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl is not a supported wheel on this platform.

我通过 wheel.py、req.py 和 pep425tags.py 追踪我的方式,试图了解它失败的原因。 在 pep425tags.py 它使用

distutils.util.get_platform().replace('.', '_').replace('-', '_')

然后,大概会与轮文件的文件名中的标签进行比较。

自从我升级到 Yosemite 后,我预计我的计算机会返回类似“macosx_10_10_intel”或“macosx_10_10_x86_64”的信息,但它返回的是“macosx_10_6_x86_64”

>>> import distutils.util
>>> distutils.util.get_platform().replace('.', '_').replace('-', '_')
'macosx_10_6_x86_64'
>>> 

优胜美地显然是在报告说它是雪豹,我说得对吗?还是 Python 3.4 弄错了?这是我的轮文件问题吗?如果有,有解决办法吗?


更新到 Python 3.4.2 解决了这个问题,我能够安装 numpy wheel 文件。 但是请注意, distutils.util.get_platform() 仍然报告“macosx_10_6_intel”,但这并不影响安装。

Python 3.4.2 (v3.4.2:ab2c023a9432, Oct  5 2014, 20:42:22) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "copyright", "credits" or "license()" for more information.
>>> import distutils.util
>>> distutils.util.get_platform().replace('.', '_').replace('-', '_')
'macosx_10_6_intel'

【问题讨论】:

  • 我在安装 Yosemite 10.10 时收到 'macosx_10_10_x86_64'。你确定你在 Python 3.4 中使用它吗?
  • 您可以将_PYTHON_HOST_PLATFORM 环境变量设置为覆盖。
  • Python 3.4.1 (v3.4.1:c0e311e010fc, May 18 2014, 00:54:21) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin Type " copyright”、“credits”或“license()”了解更多信息。 >>> 导入 distutils.util >>> distutils.util.get_platform().replace('.', '').replace('-', '') 'macosx_10_6_x86_64' >>>
  • 是否设置了MACOSX_DEPLOYMENT_TARGET 环境变量?
  • 谢谢马丁。对不起,我有点新 - 我会在哪里做呢?感谢您的耐心等待。

标签: python-3.x numpy pip osx-yosemite


【解决方案1】:

考虑到distutils.util.get_platform() 返回二进制运行的最小版本

对于 Mac OS X 系统,操作系统版本反映了在其上运行的最低版本 二进制文件将运行(即MACOSX_DEPLOYMENT_TARGET 的值 在 Python 构建期间),不是当前系统的操作系统版本。

强调我的。也就是说,对于 Python 3.4,如果您在该平台上构建 Python,您可以合理地预期该值为 10.10。

要让 Python 处理 MACOSX_DEPLOYMENT_TARGET 以在整个过程中正常工作,您需要升级到 Python 3.4.2; 3.4.1 不适合 Mac OS X 10.10 或更高版本。见问题#21811:

在 cpython 代码库中有许多地方是根据运行的系统版本或解释器构建或正在构建的 OS X ABI(例如 MACOSX_DEPLOYMENT_TARGET 的值)做出决定的。当前的大多数测试都会对这些值进行字符串比较,这对于两位数的版本号('10.10' True)将无法正常工作。

3.4.2 包含所需的修复。这同样适用于 Python 2.7 到 2.7.7 版本;如果您在 Python 2.7 升级到 2.7.8 或更高版本中看到同样的问题。

如果没有修复,intel 会与 x86_64 混在一起,就像您的设置一样:

  1. 在 10.10 上运行当前 3.4.1 和 2.7.7 二进制安装程序时,构建 C 扩展模块可能会导致通用平台名称不正确,例如“x86_64”而不是“intel”,这可能会影响扩展模块文件名和轮子或蛋的名称。

作为参考,在我的 OS X 10.10 系统上,在 Python 3.4.2 上,get_platform() 的结果是:

>>> import distutils.util
>>> distutils.util.get_platform()
'macosx-10.10-x86_64'

对于 Python 2.7.8,我得到:

>>> import distutils.util
>>> distutils.util.get_platform()
'macosx-10.4-x86_64'

【讨论】:

  • 既然 3.4.2 和 2.7.8 都有修复,为什么 get_platform() 返回不同的标签?如果它是最低要求的目标平台,它们不应该相同吗?
  • @dashesy:最小值由配置脚本设置(记录在 Makefile 中),每个 Python 版本不同。
猜你喜欢
  • 2021-04-29
  • 2016-06-20
  • 2018-08-20
  • 2018-10-17
  • 2015-04-12
  • 2015-04-18
  • 1970-01-01
  • 2020-05-31
相关资源
最近更新 更多