Устанавливается ли пакет с изменением pip в соответствии с конфигурацией python? - PullRequest
2 голосов
/ 30 мая 2019

У меня есть концептуальное сомнение относительно того, как устанавливаются / настраиваются зависимости пакетов Python, это связано с конфигурациями компиляции.

Случай 1

Установленные пакеты pyscreenshot, image, pillowиспользование pip из python 2.7, настроенного с ucs2 в пространстве пользовательских библиотек (--user).Выполнены некоторые API для получения скриншота рабочего стола, все работает гладко.

Case 2

Выполнен еще один Python 2.7, настроенный с ucs4, он находит пакеты, потому что они былиустановлен в пространстве пользователя.Выполнен тот же API, чтобы получить скриншот рабочего стола, он падает.Конфигурация ucs4 была несовместима с тем, как работают пакеты.

Так почему это произошло?Могут ли быть установлены разные версии одних и тех же пакетов, в зависимости от того, как был настроен Python?

Примечание: объяснение ucs2 / ucs4 https://docs.python.org/2/c-api/unicode.html

1 Ответ

2 голосов
/ 30 мая 2019

Так почему это произошло?

Это произошло потому, что когда оба C (двоичных) кода были загружены в память, каждый из них обрабатывал строки по-разному.В документации Python четко указано, что: "... сборки Python UCS2 и UCS4 не совместимы в двоичном формате. Имейте это в виду при написании расширений или интерфейсов."

В документации также говоритсячто: " сборки по умолчанию Python используют 16-битный тип для Py_UNICODE и хранят значения Unicode внутри как UCS2."Итак, что вы сделали: установили пакет, совместимый с интерпретатором по умолчанию, и запустили его с несовместимым интерпретатором Python.

Могут ли быть установлены разные версии одних и тех же пакетов в зависимости от конфигурации Python?

Я не уверен, что pip способен обрабатывать варианты пакетов UCS2 и UCS4.Что происходит, когда вы устанавливаете те же пакеты, используя pip из вашего интерпретатора UCS4?Если версия пакета UCS2 установлена ​​при использовании версии pip для UCS4, я бы порекомендовал загрузить исходный дистрибутив пакета и скомпилировать его самостоятельно с помощью UCS4.

Я знаю, что pip может различать os (Windows / Linux) и ABI, но я не думаю, что это может обрабатывать различия UCS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...