Python PIP 설치에서 TypeError :-= : 'Retry'및 'int'에 대해 지원되지 않는 피연산자 유형이 발생합니다.


107

pip installPython 2.7.11+가 설치된 Ubuntu 16.04 시스템에서 모든 모듈을 사용하면 다음 오류가 발생합니다.

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

핍에 어떤 문제가 있습니까? 필요한 경우 어떻게 다시 설치할 수 있습니까?

업데이트 : 전체 역 추적은 다음과 같습니다.

sunny@sunny:~$ 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'

@MartijnPieters 물론입니다. 해당 정보를 추가합니다.
devautor

그렇다면 그 바퀴는 어디에서 왔습니까? pip일반적으로 포함 된 requests패키지를 사용하고 requests일반적으로 포함 된 urllib3패키지를 사용 합니다. 이러한 휠은 포함 된 버전이 아니며 아마도이 pip코드의 일부 하위 클래스 와 호환되지 않을 수 있습니다. /usr/share/python-wheels아마도 옆으로 이동 하시겠습니까?
Martijn Pieters

나는 pip사용할 것으로 예상 pip/_vendor/requests/하고 pip/_vendor/requests/packages/urllib3/, 아니 /usr/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requests또는 /usr/share/python-wheels/urllib3-1.13.1-py2.py3-none-any.whl/urllib3.
Martijn Pieters

나는 이것에 대해 전혀 모른다! 이에 대한 정보를 어디에서 찾아야합니까? 아니면 어떻게해야합니까?
devautor

죄송합니다. 여기에는 쉬운 대답이 없습니다. 문제를 진단하려고합니다. 역 추적은 예상치 못한 것이며 버전 간의 충돌을 나타냅니다. 어떤 이유 일반적입니다 requestspip종속성을 포함. 귀하의 트레이스 백은 임베디드 버전이 사용되지 않음을 보여 주지만 그 이유 를 모르겠습니다.
Martijn Pieters

답변:


87

Ubuntu는 선캄브리아 기의 PIP 버전과 함께 제공되며 pip 관련 문제를 디버깅하는 데 시간과 시간을 소비하지 않으려면 업그레이드해야합니다.

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
python get-pip.py를 수행하면 "OSError : [Errno 13] Permission denied : '/usr/local/lib/python2.7/site-packages/pip-8.1.2.dist-info'"와 함께 실패합니다.
devautor

2
@mirror, sudo를 사용하세요. get-pip.py가 pip를 설치하려고하기 때문입니다
Raghuram Vadapalli

45
이 문제는 pip와 관련이 없습니다. 스택 추적은 패키지 가져 오기 요청이 실패하여 네트워크 문제를 나타냅니다. OP에게 pip를 다시 설치하도록 지시하는 것은 우회입니다.
Thom

2
이것이 정답입니다. 범인은 pip현재 여러 릴리스에 대해 수정되지 않은 정식 패치입니다 . github.com/pypa/pip/issues/4779
lurscher

2
raspberian에서 사용했습니다. 더 이상 "pip"를 실행할 수 없습니다. pip3 만 실행할 수 있습니다. 나는 심볼릭 링크를 추가해야했다 : ln -s / usr / local / bin / pip / usr / bin / pip이 답변에서 가져 와서 수정 (수정) : stackoverflow.com/questions/29712519/…
TheTrowser

37

프록시 뒤에있는 경우 설치를 시작하기 전에 몇 가지 추가 구성 단계를 수행해야합니다. 환경 변수 http_proxy를 프록시 주소로 설정해야합니다. bash를 사용하면 다음 명령으로 수행됩니다.

export http_proxy="http://user:pass@my.site:port/" 

당신은 또한 제공 할 수 있습니다

--proxy=[user:pass@]url:port 

pip에 대한 매개 변수. 이 [user:pass@]부분은 선택 사항입니다.


24

setuptools 업데이트가 잘되었습니다.

sudo pip install --upgrade setuptools

나를 위해 일했습니다. 실제로이 작업을 수행 한 후 다음 이후에 나타나는 오류가 있음을 깨달았습니다. Collecting setuptools (from kiwisolver> = 1.0.1-> matplotlib)
mayid

3
이것은 Raspian Stretch에서도 저에게 효과적이었습니다. 쉽게 찾을 수 있도록이 답변을 받아주십시오
샘 Hammamy에게

라즈 비안과 함께 작동하기 위해 그 후 재부팅이 필요했습니다
Pipo

4
이 명령은 Debian9에서 동일한 TypeError를 발생시킵니다. 이것은 보편적 인 해결책이 아닙니다.
sir__finley

15

우선,이 문제는 네트워크 문제로 인해 존재하며 모든 것을 제거하고 다시 설치하는 것은 큰 도움이되지 않습니다. 아마도 당신은 프록시 뒤에 있고이 경우 프록시를 설정해야합니다.

그러나 제 경우에는 프록시 뒤에 있지 않기 때문에 문제에 직면했습니다. 일반적으로 저는 프록시 뒤에서 일하지만 집에서 일할 때는 네트워크 설정에서 프록시를 없음으로 설정했습니다.

그러나 프록시 설정을 제거한 후에도 여전히 동일한 오류가 발생했습니다.

그래서 내가 타이핑했을 때

env | grep proxy

다음과 같은 것을 발견했습니다.

http_proxy=http://127.0.0.1:1234/

이것이 내가 프록시 설정을 제거했다고 생각했을 때에도 여전히 동일한 오류가 발생하는 이유였습니다.

이 프록시를 설정 해제하려면 다음을 입력하십시오.

unset http_proxy

https_proxy와 같은 다른 모든 항목에 대해 동일한 접근 방식을 따르십시오.


14

여기서 일어나는 일은 request / urllib3의 공급 업체 버전이 서로 다른 두 위치 (같은 코드이지만 다른 이름)에서 가져올 때 충돌한다는 것입니다. 그런 다음 네트워크 오류가 발생하면 휠을 가져 오기 위해 재 시도하지 않지만 위의 오류로 실패합니다. 이 오류에 대한 자세한 내용은 여기 를 참조 하십시오 .

시스템 pip가있는 솔루션은 위의를 참조하십시오 .

에 의해 빌드 된 virtualenv에이 문제가있는 경우 (pip가 별도로 설치되어 있어도 python -m venv여전히에서 휠을 복사 함 /usr/share/python-wheels) "수정"하는 가장 쉬운 방법은 다음과 같습니다.

  1. virtualenv를 만듭니다. /usr/bin/python3.6 -m venv ...
  2. requests환경에 설치 (위의 오류가 발생할 수 있음) :<venv>/bin/pip install requests
  3. requestspip에서 사용할 복사 된 버전을 제거합니다 .rm <venv>/share/python-wheels/{requests,chardet,urllib3}-*.whl

이제 a 는 urllib3이 공급 된 <venv>/bin/pip설치된 버전을 사용합니다 requests.


고마워요, 방금 제거 /usr/share/python-wheels/urllib3-1.19.1-py2.py3-none-any.whl했고 지금 수정되었습니다 (virtualenv없이).
krsoni

실제로 제 경우에는 가상 환경을 사용하지 않았습니다.
krsoni

직접에서 WHL 파일을 제거하는 경우 /usr/share/python-wheels, python -m venv쓸모있는이 만들어지지 않습니다 <venv>/bin/pip 더 이상. 따라서 이러한 파일을 제거하는 경우 필요하지 않은지 확인해야합니다. 시스템 pip와 venv pip가 모두 필요한 경우 시스템을 설치해야하며 get-pip.py( stackoverflow.com/a/37531821/1380673 참조 ) 각 venv에서 whl 파일을 제거해야합니다.
Jan Katins 2017

7

포트 443이 열려 있지 않습니다. AWS에있는 경우 사용자 지정 tcp 포트 443 만 허용하고 그렇지 않으면 아웃 바운드 연결을 위해 포트 443을 엽니 다.


이것은 OpenStack 클러스터에서 큰 시간을 보냈습니다! 좋은 디팍!
Arun Das

5

pip 업그레이드가 저에게 효과적이었습니다.

pip install --upgrade pip


5
이 매우 정확한 명령을 실행하는 동안 오류가 발생합니다 :(
allan.simon

Raspbian Sketch Lite에서 오류가 수정되었습니다.
Raúl Salinas-Monteagudo

1
Raspian Stretch Lite도 실행 중이며 오류가 수정되지 않았습니다.
Stefan Wegener

나는이 "파이썬 -m 핍 설치 --upgrade PIP"아름다운 일 동의
imbatman

2

pitft.sh / adafruit-pitft.sh를 사용 하여 Adafruit에서 RaspberryPI TFT를 설치할 때 동일한 문제가 있습니다. 있습니다.

이전 답변에서 볼 수 있듯이 어떻게 든 해석해야 할 오류가있는 코딩 스타일에 만족하지 않습니다.

비고 : retry.py 의 유형 오류 예외 는 분명히 버그입니다. 클래스 인스턴스의 부적절한 할당 및 계산으로 인해 발생합니다. Reply to an int with the default value of 10 -코드의 어딘가에 ... 둘 중 하나를 수정해야합니다. inplace-operator를 추가하거나 잘못된 할당을 수정합니다.

그래서 먼저 오류 자체를 분석하고 패치하려고했습니다. 제 경우의 실제 오류는 pip가 호출 한 동일한 retry.py 입니다.

설치 스크립트 adafruit-pitft.sh / pitft.sh 는 자체적으로 pip 에 의해 중첩 된 종속성을 설치하려고 시도하는 urllib3 적용을 시도 하므로 동일한 오류가 발생합니다.

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

TypeError :-= : '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

TypeError :-= : 'Retry'및 'int'에 대해 지원되지 않는 피연산자 유형

다음-dirty * :)-패치는 사운드 오류 추적을 활성화합니다.

# 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

임시 패치의 사운드 출력은 다음과 같습니다 (두 번 표시됩니다 ...?).

'ConnectTimeoutError (<requests.packages.urllib3.connection.VerifiedHTTPSConnection object at /)에 의해 연결이 끊어진 후 재시도 (Retry (total = 1, connect = None, read = None, redirect = None))

'ConnectTimeoutError (<requests.packages.urllib3.connection.VerifiedHTTPSConnection object at /)에 의해 연결이 끊어진 후 재시도 (Retry (total = 0, connect = None, read = None, redirect = None))

요구 사항 evdev를 충족하는 버전을 찾을 수 없습니다 (버전 :).

evdev에 대해 일치하는 배포가 없습니다.

경고 : Pip이 소프트웨어를 설치하지 못했습니다!

따라서 제 경우에는 실제로 두 가지가 오류를 일으키지 만 다른 환경에서는 다를 수 있습니다.

  1. evdev 누락 => 설치 시도
  2. 다운로드를 위해 evdev 가 포함 된 저장소 / 디스트 를 연결하는 데 실패했습니다 . => 마침내 포기

내 설치 환경이 내부 debian + raspbian 미러에서 오프라인이므로 프록시를 설정하고 싶지 않습니다.

그래서 누락 된 구성 요소 evdev 를 수동으로 설치 했습니다 .

  1. PyPI (또는 예 : github.com)에서 evdev를 다운로드합니다.

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

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

  2. 모든 로컬 계정에 대해 루트 사용자 로 압축을 풀고 수동으로 설치 하므로 설치된 것으로 감지됩니다.

    sudo su-

    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

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

참조 : issue-35334 : https://bugs.python.org/issue35334

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

참조 : issue-1486 : https://github.com/urllib3/urllib3/issues/1486

파일 : https://github.com/urllib3/urllib3/blob/master/src/urllib3/util/retry.py


2

네트워크 문제 확인, 예외 사례 코드 우회

제 경우에는 사용자 지정 인덱스를 사용하고 있었는데 해당 인덱스에는 경로가 없으므로 예외 사례 코드가 트리거됩니다. 예외 사례 버그는 여전히 존재하고 여전히 실제 문제를 가리고 있지만 nc -vzw1 myindex.example.org 443, 네트워크가 가동되었을 때 재 시도 하는 것과 같은 다른 도구와의 연결을 테스트하여이 문제를 해결할 수있었습니다 .


1

ec2 인스턴스에 awscli 도구를 설치하는 동안 비슷한 문제가 발생했습니다. 포트 443 인바운드 및 아웃 바운드 액세스를 허용하도록 보안 그룹을 변경했으며 그로 인해 문제가 해결되었습니다.


이것은 질문에 대한 답을 제공하지 않습니다. 평판 이 충분 하면 모든 게시물댓글 수 있습니다 . 대신 질문자의 설명이 필요하지 않은 답변을 제공하세요 . - 검토에서
루카스 Körfer

1
이제 더 좋아 보이나요? 난 그냥 내가 도움이되었다고 것을 언급해야한다고 생각
인 Yogesh 굽타

1

virtualenvwith 명령 을 만들려고 할 때이 오류가 발생했습니다 virtualenv myVirtualEnv. sudo명령 앞에 a 를 추가했습니다 . 그것은 모든 것을 해결했습니다.


해결책이 아닙니다. 도커에서 루트로 실행하고 동일한 문제가 있습니다. 또한 루트로 실행하는 것이 도움이되는 이유를 설명하지 않습니다.
Eric

1
@Eric, 방금 try & error 접근 방식을 사용했습니다. 나는 근본적인 목적을 모른다. 그것은 나를 위해 일했기 때문에 제안했습니다.
Zeinab Abbasimazar

1

해결책 :
1. sudo apt remove python-pip
2. pip3 install pip(또는 get-pip.py로 pip 설치 )

왜:
이 오류는 apt-get에 의해 설치된 pip 8.0.1에서 발생했습니다. 네트워크가 불안정한 경우에만 발생합니다.

apt와 함께 설치된 pip가있는 경우 다른 방법으로 설치 한 pip가 숨겨 지므로 먼저 apt를 제거해야합니다.

네트워크 연결을 끊고 pip3 또는 get-pip.py와 함께 설치된 3 개 버전의 8.0.1, 9.0.3, 10.x를 테스트했지만 오류가 발생하지 않았습니다. 따라서 pip 8.0.1의 적절한 버전에만 해당 버그가 있고 다른 버전은 괜찮다고 생각합니다.


1

제 경우에는 sudo 모드에서 Pycharm을 열고 pycharm 터미널에서 pip install nltk를 실행 하여이 오류를 표시했습니다. sudo pip install로 실행하면 오류가 해결됩니다.


0

나는 또한이 문제가 있었다. 처음에는 프록시가 설정되어 제대로 작동합니다. 그런 다음 프록시를 거치지 않는 네트워크에 연결했습니다. 프록시 pip를 다시 설정하지 않으면 작동합니다.

unset http_proxy; unset http_prox;  unset HTTP_PROXY; unset HTTPS_PROXY

0

환경에서 프록시를 제거하고 명령 줄에 추가하면 이상하게도 작동합니다. 예를 들어 pip스스로 업그레이드하려면 :

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

내 문제는 환경에 프록시가 있습니다. pip는 논쟁 중 하나만 존중하는 것 같습니다.


0

이것이 내가 찾은이 문제에 대한 작업 솔루션입니다.

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

0

나 자신을 위해 wlan0이 다운되어 연결할 수 없다는 것이 밝혀졌습니다. 따라서 wlan0이 작동하는지 확인하면 pip / pip3가 문제없이 작동 할 수 있습니다.


0

위에서 대답 한 해결책을 시도했습니다.

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.