Yosemite上的Python 3.4 pip安装轮失败 - “这个平台上没有支持的轮子”

时间:2014-11-29 15:41:43

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

我一直在尝试使用Yosemite和全新安装的ActiveState Python 3.4在MacBook Pro上安装numpy,pysci等。我已经尝试了很多车轮文件,它们都失败了“这个平台上没有支持的车轮”。例如,从https://pypi.python.org/pypi/numpy使用最新的Python 3.4轮文件:

...$ 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'
>>> 

我是否认为Yosemite显然是在报道它是Snow Leopard?或者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'

1 个答案:

答案 0 :(得分:4)

考虑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或更高版本。

如果没有修复,intelx86_64混在一起,就像您的设置一样:

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

作为参考,在我的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'