如何获得pip告诉我为什么它与PyPI二进制轮子不匹配?

问题描述 投票:2回答:1

我正在构建自己的Python安装,然后使用pip将一些软件包安装到其中。我想为Cryptography这样的包使用预先构建的二进制轮。

  • Python 2.7.15 / 2.7.16
  • Pip 19.0.3
  • Setuptools 40.8.0

在GNU / Linux上只是工作:它抓住了manylinux1轮,一切正常。

在MacOS上,它拒绝为大多数版本下载任何二进制轮。我为pip添加了很多-v选项,但它说的是:

$ mypython -s -u -m pip install -v --only-binary 'cryptography' 'cryptography==2.6.1'
  ...
Skipping link https://files.pythonhosted.org/packages/.../cryptography-2.6.1-cp27-cp27m-macosx_10_6_intel.whl#sha256=... (from https://pypi.org/simple/cryptography/) (requires-python:>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*); it is not compatible with this Python
  ...
  Could not find a version that satisfies the requirement cryptography==2.6.1 (from versions: 1.0.1, 1.0.2, 1.1, 1.1.1, 1.1.2, 1.2, 1.2.1, 1.2.2, 1.3.1, 1.3.2, 1.3.3, 1.3.4, 1.4, 1.5, 1.5.1, 1.5.2, 1.5.3, 1.6, 1.7, 1.7.1, 1.8, 1.8.1, 1.8.2)

我试图理解为什么那些特定的版本可以但不是最新的,我唯一能看到的是那些版本有一个特定的x86_64轮组,而后者只有胖二进制intel轮组。我的Python有一个包定义:

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

所以我想知道是不是这样。我修改了我的Python构建以使用MACOSX_DEPLOYMENT_TARGET=10.6并将--enable-universalsdk=/ --with-universal-archs=intel添加到配置行,现在我的Python报告了这个:

>>> import distutils.util
>>> distutils.util.get_platform()
'macosx-10.6-intel'

但是,当我尝试安装时,我仍然从pip获得完全相同的消息。

所以我想知道,有什么方法我可以得到更多信息,并告诉我这些二进制包它不喜欢什么,这导致它说“不兼容”并跳过它们?

python macos pip python-wheel
1个回答
2
投票

感谢@wim的提示我找到了这个命令:

$ mypython
  ...
>>> from from setuptools.pep425tags import get_supported
>>> for t in get_supported(): print(str(t))
...

这显示了用于匹配受支持包的元组的完整列表。使用这些信息,我能够将它与PyPI下载进行比较,发现我已经构建了支持UCS4的MacOS Python(在Linux上很常见),其中相对较少的PyPI包为MacOS提供了宽的unicode二进制轮。

我没有特别的理由喜欢UCS4所以我将我的MacOS版本切换到UCS2并且它有效!

希望这些信息对其他人有用。

© www.soinside.com 2019 - 2024. All rights reserved.