После обновления не работает
Сегодня я обновился от пункта 7.1.0 до 7.1.2, и теперь он не работает.
$ pip search docker-compose
Exception:
Traceback (most recent call last):
File "/Library/Python/2.7/site-packages/pip/basecommand.py", line 223, in main
status = self.run(options, args)
File "/Library/Python/2.7/site-packages/pip/commands/search.py", line 43, in run
pypi_hits = self.search(query, options)
File "/Library/Python/2.7/site-packages/pip/commands/search.py", line 60, in search
hits = pypi.search({'name': query, 'summary': query}, 'or')
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/xmlrpclib.py", line 1240, in __call__
return self.__send(self.__name, args)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/xmlrpclib.py", line 1599, in __request
verbose=self.__verbose
File "/Library/Python/2.7/site-packages/pip/download.py", line 788, in request
return self.parse_response(response.raw)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/xmlrpclib.py", line 1490, in parse_response
return u.close()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/xmlrpclib.py", line 799, in close
raise Fault(**self._stack[0])
Fault: <Fault 1: "<type 'exceptions.KeyError'>:'hits'">
Итак, я попробовал переустановить:
sudo -H pip install --force-reinstall -U pip
Повторная установка запускалась без ошибок, но когда я попытался выполнить поиск, я получил ту же ошибку.
Итак, я попытался переустановить старую версию:
sudo -H pip install --force-reinstall -U pip==7.1.0
Опять же, переустановка работала, но поиск был по-прежнему сломан после переустановки. В дополнение к ошибке, я получил сообщение об обновлении версии:
You are using pip version 7.1.0, however version 7.1.2 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Отключение кеша также дает ту же ошибку:
pip search docker-compose --no-cache-dir --disable-pip-version-check
Проблема, похоже, связана только с функцией поиска, так как pip все еще функционирует достаточно хорошо, чтобы переустановить себя и т.д.
Я считаю, что сегодня я установил еще один пакет, который был составлен докере. Проблема возникает при поиске пакетов, отличных от docker-compose, как в моих примерах.
Любые идеи?
Ответы
Ответ 1
Я не смог воспроизвести это с помощью протокола 7.1.2 и Python 2.7.8 или 3.5.1 в Linux.
xmlrpclib docs говорят об ошибках:
Вызов метода также может вызвать специальный экземпляр Fault, используемый для сигнализации Ошибки сервера XML-RPC
Это означает, что pip сообщает о проблеме на стороне сервера (pypi).
Сайт состояния инфраструктуры Python сообщает о проблемах с поиском пипов в 2015-09-11 и 2015-09-12.
Я подозреваю, что это не ошибка в пипе, а проблема с pypi.python.org о датах, о которых идет речь. Этот вопрос был задан в 2015-09-11 годах.
Аналогичная ошибка была зарегистрирована на pypi bitbucket repo в 2015-09-11 годах, усиливая мою теорию.
Интересно, что существует еще одна подобная ошибка зарегистрированная в pypi github repo. В этом случае термин поиска является регулярным выражением:
pip search "^docker-compose$"
Я могу воспроизвести эту ошибку на Python 2.7.8 и Python3.5.1, pip-7.1.2 и pip-8.1.1 на Linux; однако я не вижу ничего в документации на pip, чтобы предположить, что поиск в пике поддерживает regex, а этот ответ утверждает, что regex не поддерживается, поэтому я думаю, что это отдельный вопрос, не связанный к вопросу ОП.
Ответ 2
pip
делает это иногда, если совпадений (хитов) не найдено:
$ pip search ''
:
Fault: <Fault 1: "<type 'exceptions.KeyError'>:'hits'">
$ pip search 'something'
:
OK
Также может быть ошибка на стороне сервера, которая не может предоставить необходимую информацию. Таким образом, исправление должно быть выполнено pip
devs, или разработчиками сервера, или и тем и другим.
Ответ 3
Когда я не получил ответа на этот вопрос в прошлом году, я опубликовал вопрос о GitHub, и было определено, что моя проблема была вызванный тем, что сервер PyPi/pip не работает (только часть поиска, я думаю).
Я не могу быть уверен, но, похоже, было больше комментариев/ответов на этот вопрос, когда он был активным в прошлом году. Я действительно думал, что кто-то написал этот ответ здесь (по крайней мере, в комментарии или что-то еще), но он явно не здесь сейчас.
Я думаю, что у tedder42 есть другая проблема, чем у меня, потому что в PyPi не было недавнего простоя. Даже если кто-то отправил реальный ответ на его вопрос, я бы не смог проверить это. Поэтому я считаю, что лучший способ действий - проигнорировать его щедрость, и если у него все еще есть проблема, это должно быть обращено в новый вопрос.