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 отдельно), кажется, что самый простой способ "исправить" это быть:
- создать virtualenv:
/usr/bin/python3.6 -m venv...
-
requests
на установку в среду (это может вызвать вышеуказанную ошибку): <venv>/bin/pip install requests
- удалите скопированные версии
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 не удалось установить программное обеспечение!
Так что в моем случае на самом деле две вещи вызывают ошибку, это может варьироваться в других средах:
- Отсутствует evdev => попробуйте установить
- Не удалось подключить репозиторий/дистрибутив, содержащий evdev, для загрузки. => наконец брось
Моя среда установки отключена от внутреннего зеркала debian + raspbian, поэтому я не хочу устанавливать прокси...
Итак, я приступил к ручной установке отсутствующего компонента evdev:
-
скачать evdev из PyPI (или, например, с github.com):
https://pypi.org/project/evdev/
https://files.pythonhosted.org/packages/7e/53/374b82dd2ccec240b7388c65075391147524255466651a14340615aabb5f/evdev-1.1.2.tar.gz
-
Распакуйте и установите вручную как пользователь root - для всех локальных учетных записей, которые определяются как установленные:
судо су -
tar xf evdev-1.1.2.tar.gz
cd evdev-1.1.2
Python setup.py установить
-
Вызовите скрипт установки снова:
adafruit-pitft.sh # или pitft.sh
... отвечать на диалоги...
...это.
Если вы продолжаете онлайн через прямой доступ PyPI:
-
проверьте ваш роутинг + брандмауэр на доступ к pypi.org
-
установить прокси, если это необходимо (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"
Приветствия