Python PIP Install throws TypeError: неподдерживаемый тип операндов для - =: 'Retry' и 'int'

Используя pip install для любого модуля, очевидно, на моей системе Ubuntu 16.04 с python 2.7.11+ выдает эту ошибку:

TypeError: unsupported operand type(s) for -=: 'Retry' and 'int'

Что не так с пипсом? Как я могу переустановить его, если необходимо?

Обновление: полная трассировка ниже

[email protected]:~$ pip install requests
Collecting requests
Exception:
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 209, in main
    status = self.run(options, args)
  File "/usr/lib/python2.7/dist-packages/pip/commands/install.py", line 328, in run
    wb.build(autobuilding=True)
  File "/usr/lib/python2.7/dist-packages/pip/wheel.py", line 748, in build
    self.requirement_set.prepare_files(self.finder)
  File "/usr/lib/python2.7/dist-packages/pip/req/req_set.py", line 360, in prepare_files
    ignore_dependencies=self.ignore_dependencies))
  File "/usr/lib/python2.7/dist-packages/pip/req/req_set.py", line 512, in _prepare_file
    finder, self.upgrade, require_hashes)
  File "/usr/lib/python2.7/dist-packages/pip/req/req_install.py", line 273, in populate_link
    self.link = finder.find_requirement(self, upgrade)
  File "/usr/lib/python2.7/dist-packages/pip/index.py", line 442, in find_requirement
    all_candidates = self.find_all_candidates(req.name)
  File "/usr/lib/python2.7/dist-packages/pip/index.py", line 400, in find_all_candidates
    for page in self._get_pages(url_locations, project_name):
  File "/usr/lib/python2.7/dist-packages/pip/index.py", line 545, in _get_pages
    page = self._get_page(location)
  File "/usr/lib/python2.7/dist-packages/pip/index.py", line 648, in _get_page
    return HTMLPage.get_page(link, session=self.session)
  File "/usr/lib/python2.7/dist-packages/pip/index.py", line 757, in get_page
    "Cache-Control": "max-age=600",
  File "/usr/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requests/sessions.py", line 480, in get
    return self.request('GET', url, **kwargs)
  File "/usr/lib/python2.7/dist-packages/pip/download.py", line 378, in request
    return super(PipSession, self).request(method, url, *args, **kwargs)
  File "/usr/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requests/sessions.py", line 468, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requests/sessions.py", line 576, in send
    r = adapter.send(request, **kwargs)
  File "/usr/share/python-wheels/CacheControl-0.11.5-py2.py3-none-any.whl/cachecontrol/adapter.py", line 46, in send
    resp = super(CacheControlAdapter, self).send(request, **kw)
  File "/usr/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requests/adapters.py", line 376, in send
    timeout=timeout
  File "/usr/share/python-wheels/urllib3-1.13.1-py2.py3-none-any.whl/urllib3/connectionpool.py", line 610, in urlopen
    _stacktrace=sys.exc_info()[2])
  File "/usr/share/python-wheels/urllib3-1.13.1-py2.py3-none-any.whl/urllib3/util/retry.py", line 228, in increment
    total -= 1
TypeError: unsupported operand type(s) for -=: 'Retry' and 'int'

Ответ 1

Ubuntu поставляется с версией PIP от precambrian и что вам нужно обновить его, если вы не хотите тратить часы и часы на отладку связанных с пиком проблем.

apt-get remove python-pip python3-pip
wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
python3 get-pip.py

Как вы заметили, я включил информацию как для Python 2.x, так и для 3.x

Ответ 2

Если вы находитесь за прокси-сервером, перед началом установки вы должны выполнить дополнительные шаги по настройке. Вы должны установить переменную окружения http_proxy на адрес прокси-сервера. Используя bash, это выполняется с помощью команды

export http_proxy="http://user:[email protected]:port/" 

Вы также можете указать

--proxy=[user:[email protected]]url:port 

для параметра pip. Часть [user:[email protected]] является необязательной.

Ответ 3

Прежде всего, эта проблема существует из-за проблем с сетью, а удаление и повторная установка все не будет иметь большой поддержки. Возможно, вы находитесь за прокси-сервером, и в этом случае вам нужно установить прокси-сервер.

Но в моем случае я столкнулся с проблемой, потому что не был за прокси. Как правило, я работаю за прокси-сервером, но при работе на дому я установил прокси-сервер в "Нет" в настройках сети.

Но я все еще получал те же ошибки даже после удаления настроек прокси.

Итак, когда я набрал

env | grep proxy

Я нашел что-то вроде этого:

http_proxy=http://127.0.0.1:1234/

И именно по этой причине я все еще получал ту же ошибку, даже когда мне казалось, что я удалил настройки прокси.

Чтобы отключить этот прокси-сервер, введите

unset http_proxy

Следуйте одному и тому же подходу для всех других записей, таких как https_proxy.

Ответ 4

Здесь происходит то, что продаваемые версии request/urllib3 конфликтуют при импорте в двух разных местах (один и тот же код, но разные имена). Если у вас возникает ошибка сети, он не пытается получить колесо, но завершается с ошибкой, описанной выше. Смотрите здесь для более глубокого погружения в эту ошибку.

Для решения с системным пунктом см. Выше.

Если у вас есть эта проблема в virtualenv, построенном с помощью python -m venv (который по-прежнему копирует колеса из /usr/share/python-wheels, даже если у вас установлен pip отдельно), кажется, что самый простой способ "исправить" это быть:

  1. создать virtualenv: /usr/bin/python3.6 -m venv...
  2. requests на установку в среду (это может вызвать вышеуказанную ошибку): <venv>/bin/pip install requests
  3. удалите скопированные версии requests которые будут использоваться pip: rm <venv>/share/python-wheels/{requests,chardet,urllib3}-*.whl

Теперь <venv>/bin/pip использует установленную версию requests которую продал urllib3.

Ответ 5

Обновление setuptools хорошо для меня.

sudo pip install --upgrade setuptools

Ответ 6

порт 443 не открыт, просто разрешите пользовательский порт tcp 443, если на AWS еще открыть порт 443 для исходящих подключений...

Ответ 7

Просто обновление пипа сработало у меня:

pip install --upgrade pip

Ответ 8

Я получал эту ошибку для любой установки пакета с использованием pip. Позже я обнаружил, что pip требует, чтобы http_proxy и переменная https_proxy работали за прокси. После установки этих двух переменных среды эта проблема исправлена.

export http_proxy=http://<username>:<passowrd>@<proxy_ip>:<proxy_port>/
export https_proxy=https://<username>:<passowrd>@<proxy_ip>:<proxy_port>/

Ответ 9

Это происходит со мной, когда я работаю за прокси. Я решаю эту проблему просто

pip install --proxy http://proxyAddress: порт Package_To_Be_Installed

Ответ 10

У меня та же проблема при установке RaspberryPI TFT от Adafruit с помощью pitft.sh/adafruit-pitft.sh.

Меня не устраивают стили кодирования с ошибками, которые откуда-то интерпретируются - как это видно из предыдущих ответов.

Примечание: Исключением ошибки типа в retry.py, очевидно, является ошибка, вызванная неправильным присваиванием и вычислением экземпляра класса Reply для int со значением по умолчанию 10 - где-то в коде... Должно быть исправлено либо добавив оператор на месте или исправив ошибочное назначение.

Поэтому попытался сначала проанализировать и исправить саму ошибку. Фактическая ошибка в моем случае такая же - retry.py, вызываемая pip.

Сценарий установки adafruit-pitft.sh/pitft.sh пытается применить urllib3, который сам пытается установить вложенные зависимости с помощью pip, поэтому такая же ошибка.

adafruit-pitft.sh # или pitft.sh

...

_stacktrace = sys.exc_info() [2]) Файл "/usr/share/python-wheels/urllib3-1.13.1-py2.py3 none-any.whl/urllib3/util/retry.py", строка 228, в приращение

всего - = 1

Ошибка типа: неподдерживаемые типы операндов для - =: 'Retry' и 'int'

Для текущего дистрибутива (на основе debian-9.6.0/stretch):

Файл "/usr/share/python-wheels/urllib3-1.19.1-py2.py3-none-any.whl/urllib3/util/retry.py", строка 315, в приращениях

всего - = 1

Ошибка типа: неподдерживаемые типы операндов для - =: 'Retry' и 'int'

Следующее - пакостный * :) - патч включает звуковую трассировку ошибки:

# File: retry.py - in *def increment(self, ..* about line 315
# original: total = self.total

# patch: quick-and-dirty-fix
# START:
if isinstance(self.total, Retry):
    self.total = self.total.total

if type(self.total) is not int:
    self.total = 2 # default is 10
# END:

# continue with original:
total = self.total

if total is not None:
    total -= 1

connect = self.connect
read = self.read
redirect = self.redirect
cause = 'unknown'
status = None
redirect_location = None

if error and self._is_connection_error(error):
    # Connect retry?
    if connect is False:
        raise six.reraise(type(error), error, _stacktrace)
    elif connect is not None:
        connect -= 1

Вывод звучания с временным патчем (отображается дважды...?):

Повторная попытка (Retry (total = 1, connect = None, read = None, redirect = None)) после разрыва соединения, вызванного ConnectTimeoutError (<запросы .packages.urllib3.connection.VerifiedHTTPSConnection объект в /

Повторная попытка (Retry (total = 0, connect = None, read = None, redirect = None)) после разрыва соединения с помощью ConnectTimeoutError (<запросы .packages.urllib3.connection.VerifiedHTTPSConnection объект в /

Не удалось найти версию, которая удовлетворяет требованию evdev (из версии:)

Не найдено подходящего распределения для evdev

ВНИМАНИЕ: Pip не удалось установить программное обеспечение!

Так что в моем случае на самом деле две вещи вызывают ошибку, это может варьироваться в других средах:

  1. Отсутствует evdev => попробуйте установить
  2. Не удалось подключить репозиторий/дистрибутив, содержащий evdev, для загрузки. => наконец брось

Моя среда установки отключена от внутреннего зеркала debian + raspbian, поэтому я не хочу устанавливать прокси...

Итак, я приступил к ручной установке отсутствующего компонента evdev:

  1. скачать evdev из PyPI (или, например, с github.com):

    https://pypi.org/project/evdev/

    https://files.pythonhosted.org/packages/7e/53/374b82dd2ccec240b7388c65075391147524255466651a14340615aabb5f/evdev-1.1.2.tar.gz

  2. Распакуйте и установите вручную как пользователь root - для всех локальных учетных записей, которые определяются как установленные:

    судо су -

    tar xf evdev-1.1.2.tar.gz

    cd evdev-1.1.2

    Python setup.py установить

  3. Вызовите скрипт установки снова:

    adafruit-pitft.sh # или pitft.sh

    ... отвечать на диалоги...

    ...это.

Если вы продолжаете онлайн через прямой доступ PyPI:

  1. проверьте ваш роутинг + брандмауэр на доступ к pypi.org

  2. установить прокси, если это необходимо (http_proxy/https_proxy)

И это работает..

Надеюсь, что это помогает и в других случаях.

Arno-Can Uestuensoez

----------------------------------------------

Смотрите также: выпуск - 35334: https://bugs.python.org/issue35334

----------------------------------------------

Смотрите также: выпуск - 1486: https://github.com/urllib3/urllib3/issues/1486

для файла: https://github.com/urllib3/urllib3/blob/master/src/urllib3/util/retry.py

Ответ 11

Я столкнулся с подобной проблемой при попытке установить awscli-инструмент на экземпляр ec2. Я изменил группу безопасности, чтобы разрешить входящий и исходящий доступ к порту 443 и решить эту проблему для меня.

Ответ 12

Я получил эту ошибку, когда пытался создать команду virtualenv с командой virtualenv myVirtualEnv. Я просто добавил sudo перед командой; он все решил.

Ответ 13

Я попробовал решение, отвеченное выше:

apt-get remove python-pip python3-pip
wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
python3 get-pip.py

Когда я пытался

python get-pip.py 
python3 get-pip.py

Я получил это сообщение

 Could not install packages due to an EnvironmentError:
[Errno 13] Permission denied: /usr/bin/pip3 Consider using the --user
 option or check the permissions.

Я сделал следующее, и это работает

python3 -m venv env
source ./env/bin/activate
Sudo apt-get update 
apt-get remove python-pip python3-pip
wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
python3 get-pip.py
pip3 install pip
sudo easy_install pip
pip install --upgrade pip

Ответ 14

У меня также была эта проблема. Первоначально был установлен прокси-сервер и работал нормально. Затем я подключился к сети, где она не проходит через прокси. После сброса прокси-сервера снова получите работу.

unset http_proxy; unset http_prox;  unset HTTP_PROXY; unset HTTPS_PROXY

Ответ 15

Необычно, если я удалю прокси из среды и добавлю его в командную строку, он работает для меня. Например, чтобы обновить pip самостоятельно:

env http_proxy= https_proxy= pip install pip --upgrade --proxy 'http://proxy-url:80'

В моей проблеме был прокси-сервер в среде. Кажется, что пип только отличит аргумент.

Ответ 16

Это рабочее решение этой проблемы, которое я нашел.

sudo apt-get clean
cd /var/lib/apt
sudo mv lists lists.old
sudo mkdir -p lists/partial
sudo apt-get clean
sudo apt-get update

Ответ 17

Решение:
1. sudo apt remove python-pip
2. pip3 install pip (или установить pip с помощью get-pip.py)

Зачем:
Эта ошибка произошла на pip 8.0.1, который был установлен с помощью apt-get. И произошло только тогда, когда ваша сеть нестабильна.

Если у вас установлен пип с apt, он скрывает пип, установленный вами другими способами, поэтому сначала вы должны удалить apt.

Я отключил сеть и проверил 8.0.1, 9.0.3, 10.x 3 версии, установленные с pip3 или get-pip.py, ошибки не было. Итак, я думаю, что только apt-версия pip 8.0.1 имеет эту ошибку, остальные в порядке.

Ответ 18

Для меня оказалось, что wlan0 не работал, в результате чего я не смог подключиться. Поэтому, гарантируя, что wlan0 был включен, pip/pip3 работал без проблем.

Ответ 19

В моем случае я открыл Pycharm в режиме sudo и запустил pip install nltk в терминале pycharm, который показал эту ошибку. запуск с помощью sudo pip install устраняет ошибку.

Ответ 20

Эта проблема вызвана тем, что ваша прокси-сервер решает только эту команду:

sudo pip install requests --proxy="[user:[email protected]]proxy.server:port"

А в случае, если у вас нет имени пользователя и пароля, просто используйте приведенную ниже команду:

sudo pip install requests --proxy="proxy.server:port"
Пример

Example

sudo pip install requests --proxy="172.168.0.12:8088"

Приветствия