Ошибки при установке Tensorflow с Python 3.7.0 - почему pip3 не разрешил зависимость самостоятельно? - PullRequest
1 голос
/ 13 марта 2020

Я получаю ошибки при установке Tensorflow (cpu) в виртуальную среду на Windows 7 коробке с Python 3.7.0.

Моя команда:

pip3 install tensorflow==2.0.0

Я получил следующие ошибки, которые не помешали завершить процесс.

ОШИБКА: google-auth 1.11.2 имеет require setuptools> = 40.3.0, но у вас будет setuptools 39.0.1, который несовместим.

ОШИБКА: tenorboard 2.0.2 имеет требование setuptools> = 41.0.0, но у вас будет setuptools 39.0. 1, что несовместимо.

Если мне нужна более высокая версия какой-либо библиотеки, не следует ли pip получить ее? Или это означает, что в репо не было такого?

Я смотрю на pip как npm для Python. Достаточно ли она точна?

Я обновил pip сам, прежде чем делать что-либо еще.

Следующий вопрос помог мне решить насущную проблему: ОШИБКА: тензорная доска 2.0.2 имеет требование setuptools> = 41.0.0, но у вас будет setuptools 40.6.2, который несовместим

Я сделал следующее:

pip3 install setuptools --upgrade
pip3 uninstall tensorflow
pip3 install tensorflow==2.0.0

Однако я все еще заинтересован что происходило под капотом здесь.

1 Ответ

2 голосов
/ 13 марта 2020

Проблема здесь не в том, что требовалась более новая версия пакета, а в том, что требовалась несовместимая версия.

Формат спецификации версии, используемый pip, описан в PEP 440 . Этот формат полностью совместим с semanti c версиями , который по существу состоит из номеров версий в форме Major.Minor.Path. Используя эту схему управления версиями, пакеты с различными версиями Major могут иметь обратно несовместимые изменения API, и поэтому пакеты не могут свободно обновляться между основными версиями без кода, нарушающего риск.

Конкретным примером этого является разница между Python 2.XX и Python 3.XX. С этим изменением основного номера версии Python получил множество обратно несовместимых изменений, таких как замена print оператор со встроенной функцией. Это привело к тому, что многие действительные Python 2 программы стали недействительными в Python 3, и поэтому разработчики могли переносить свои программы на более новую основную версию Python только после того, как они убедились, что их программы будут совместимы с новым API.

В вашем примере у вас установлена ​​версия setuptools 39.0.1. Затем вы попытались установить пакет, который зависит от setuptools 40.3.0 или новее. Как вы заметите, основные номера версий этих двух пакетов различаются (39 != 40), и поэтому pip не может быть уверен, что обновление пакета не нарушит вашу существующую среду Python.

Если бы вместо этого вы установили, скажем, setuptools 40.2.0, pip с удовольствием обновил бы вашу установку setuptools до 40.3.0. Это связано с тем, что изменения в версии Minor должны быть обратно совместимыми, и поэтому любой код, работающий с setuptools 40.2.0, должен работать так же хорошо с 40.3.0.

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