Как получить pip, чтобы сказать мне, почему он не соответствует двоичным колесам PyPI? - PullRequest
2 голосов
/ 28 марта 2019

Я собираю свою собственную установку Python, затем использую pip для установки в нее некоторых пакетов. Я хочу использовать готовые двоичные диски для пакетов типа Криптография .

  • Python 2.7.15 / 2.7.16
  • Пип 19.0.3
  • Setuptools 40.8.0

На GNU / Linux просто работает: он захватывает колесо manylinux1 и все работает просто отлично.

В MacOS он отказывается загружать какие-либо двоичные диски для большинства версий. Я добавил множество -v опций в pip, но все, что он говорит, это:

$ 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 wheel, в то время как более поздние имеют только толстый двоичный файл 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, когда пытаюсь установить.

Так что мне интересно, есть ли способ заставить pip быть более информативным и точно сказать мне , что в этих бинарных пакетах ему не нравится, то есть заставляет его сказать " не совместимы "и пропустить их?

1 Ответ

2 голосов
/ 29 марта 2019

Благодаря подсказке от @wim я нашел эту команду:

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

Здесь показан полный список кортежей, используемых для соответствия поддерживаемым пакетам.Используя эту информацию, я смог сравнить ее с загрузками PyPI и обнаружить, что я построил свой MacOS Python с поддержкой UCS4 (что распространено в Linux), где относительно немного пакетов PyPI предоставляют широкие двоичные диски Unicode для MacOS.

У меня нет особых причин предпочитать UCS4, поэтому я переключил свои сборки MacOS на UCS2, и это сработало!

Надеюсь, эта информация окажется полезной для кого-то еще.

...