web-dev-qa-db-ger.com

Python PIP Install wirft TypeError: Nicht unterstützte Operandentypen für - =: 'Retry' und 'int'

Wenn Sie pip install für ein beliebiges Modul verwenden, das anscheinend auf meinem Ubuntu 16.04-System mit Python 2.7.11+ verwendet wird, wird dieser Fehler ausgegeben:

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

Was ist los mit pip? Wie kann ich es ggf. neu installieren?

Update: Vollständige Rückverfolgung ist unten

[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'
69
devautor

Ubuntu wird mit einer PIP-Version von Precambrian geliefert. Daher müssen Sie ein Upgrade durchführen, wenn Sie nicht stundenlang mit dem Debuggen von Pip-Problemen arbeiten möchten.

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

Wie Sie beobachtet haben, habe ich Informationen für Python 2.x und 3.x eingefügt 

63
sorin

Wenn Sie sich hinter einem Proxy befinden, müssen Sie einige zusätzliche Konfigurationsschritte ausführen, bevor Sie mit der Installation beginnen. Sie müssen die Umgebungsvariable http_proxy auf die Proxyadresse setzen. Mit bash wird dies mit dem Befehl erreicht 

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

Sie können auch die 

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

parameter zu pip. Der [user:[email protected]]-Teil ist optional.

28
Livruen Nati

Dieses Problem ist vor allem auf Netzwerkprobleme zurückzuführen, und die Deinstallation und Neuinstallation von allem ist keine große Hilfe. Wahrscheinlich befinden Sie sich hinter einem Proxy, und in diesem Fall müssen Sie einen Proxy einstellen.

In meinem Fall war ich jedoch mit dem Problem konfrontiert, weil ich nicht hinter der Vertretung stand. Im Allgemeinen arbeite ich hinter einem Proxy, aber wenn ich von zu Hause aus arbeite, habe ich den Proxy in den Netzwerkeinstellungen auf Keine festgelegt.

Die gleichen Fehler wurden jedoch auch nach dem Entfernen der Proxy-Einstellungen angezeigt.

Also, wenn ich tippte 

env | grep proxy

Ich habe so etwas gefunden: 

http_proxy=http://127.0.0.1:1234/

Aus diesem Grund erhielt ich immer noch denselben Fehler, selbst wenn ich dachte, ich hätte die Proxy-Einstellungen entfernt.

Um diesen Proxy zu deaktivieren, geben Sie Folgendes ein

unset http_proxy

Folgen Sie dem gleichen Ansatz für alle anderen Einträge, z. B. https_proxy.

12
thisisashwani

Was hier passiert, ist, dass die verkauften Versionen von request/urllib3 an zwei verschiedenen Stellen (gleichem Code, aber unterschiedlichen Namen) importiert werden. Wenn Sie dann einen Netzwerkfehler haben, versucht es nicht, das Rad abzurufen, schlägt jedoch mit dem obigen Fehler fehl. Sehen Sie here für einen tieferen Einstieg in diesen Fehler.

Für die Lösung mit Systempip siehe oben .

Wenn Sie dieses Problem in einer von python -m venv erstellten virtualenv haben (die die Laufräder trotzdem von /usr/share/python-wheels kopiert, auch wenn Sie pip separat installiert haben), scheint der einfachste Weg zu "beheben":

  1. erstellen Sie die Virtualenv: /usr/bin/python3.6 -m venv ...
  2. requests in der Umgebung installieren (dies kann den obigen Fehler verursachen): <venv>/bin/pip install requests
  3. entfernen Sie die kopierten Versionen von requests, die von pip verwendet werden würden: rm <venv>/share/python-wheels/{requests,chardet,urllib3}-*.whl

Nun verwendet ein <venv>/bin/pip die installierte Version von requests, die urllib3 verkauft hat. 

10
Jan Katins

port 443 ist nicht geöffnet. Erlauben Sie einfach den benutzerdefinierten TCP-Port 443, wenn Sie unter AWS den Port 443 für die ausgehenden Verbindungen öffnen.

5
Deepak

Das Aktualisieren von setuptools hat für mich gut funktioniert.

Sudo pip install --upgrade setuptools

Ich habe diesen Fehler bei jeder Paketinstallation mit pip erhalten. Später stellte ich fest, dass pip die http_proxy- und https_proxy-Variable benötigt, um hinter einem Proxy zu laufen. Nach dem Einstellen dieser 2 Umgebungsvariablen ist dieses Problem behoben.

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

Nur ein Upgrade von pip hat für mich funktioniert:

pip install --upgrade pip

3
cleicar

Das passiert mir, wenn ich hinter dem Proxy arbeite ... Ich löse dieses Problem einfach durch

pip install --proxy http: // proxyAddress: Port Package_To_Be_Installed

2

Ich habe das gleiche Problem, wenn Sie ein RaspberryPI-TFT von Adafruit mit pitft.sh/adafruit-pitft.sh installieren. 

Ich bin nicht glücklich über Codierstile mit Fehlern, die irgendwo interpretiert werden können - wie die vorherigen Antworten zeigen konnten.

Anmerkung: Die Typfehlerausnahme von retry.py ist offensichtlich ein Fehler, der durch eine unangemessene Zuweisung und Berechnung einer Instanz der Klasse Reply an einen int verursacht wird. mit dem Standardwert 10 - irgendwo im Code ... Sollte entweder durch Hinzufügen eines Inplace-Operators oder durch Beheben der fehlerhaften Zuweisung behoben werden.

Also habe ich versucht, zuerst den Fehler selbst zu analysieren und zu korrigieren. Der tatsächliche Fehler ist in meinem Fall derselbe - retry.py, der von pip aufgerufen wird.

Das Installationsskript adafruit-pitft.sh/pitft.sh versucht, urllib3 anzuwenden, das selbst versucht, verschachtelte Abhängigkeiten mit pip zu installieren. also derselbe Fehler.

adafruit-pitft.sh # oder pitft.sh 

...

_stacktrace = sys.exc_info () [2]) Datei "/usr/share/python-wheels/urllib3-1.13.1-py2.py3 none-any.whl/urllib3/util/retry.py", Zeile 228, inkrementell

total - = 1

TypeError: Nicht unterstützte Operandentypen für - =: 'Retry' und 'int'

Für die aktuelle Distribution (basierend auf debian-9.6.0/stretch):

Datei "/usr/share/python-wheels/urllib3-1.19.1-py2.py3-none-any.whl/urllib3/util/retry.py", Zeile 315, inkrementell

total - = 1

TypeError: Nicht unterstützte Operandentypen für - =: 'Retry' und 'int'

Der folgende - dirty * :) - Patch ermöglicht eine fehlerhafte Ablaufverfolgung:

# 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

Die Soundausgabe mit dem temporären Patch wird (zweimal angezeigt ...?):

Erneut versuchen (Wiederholung (insgesamt = 1, Verbinden = Keine, Lesen = Keine, Weiterleitung = Keine)) nachdem die Verbindung durch 'ConnectTimeoutError (<Anforderungen.Pakete.urllib3.connection.VerifiedHTTPSConnection-Objekt bei/unterbrochen wurde)

Wiederholen (Wiederholen (insgesamt = 0, Verbinden = Keine, Lesen = Keine, Weiterleitung = Keine)), nachdem die Verbindung durch .__ unterbrochen wurde. 'ConnectTimeoutError (<request.packages.urllib3.connection.VerifiedHTTPSConnection-Objekt bei /

Konnte keine Version finden, die die Anforderung evdev erfüllt (aus Versionen:)

Keine passende Distribution für evdev gefunden

WARNUNG: Pip konnte die Software nicht installieren!

In meinem Fall verursachen also zwei Dinge den Fehler, dies kann in anderen Umgebungen variieren:

  1. Fehlendes evdev => Installation versuchen
  2. Verbindung zu Repo/Dist mit evdev zum Herunterladen fehlgeschlagen. => endlich aufgeben

Meine Installationsumgebung ist offline von einem internen Debian + Raspbian-Spiegel, daher möchte Nicht den Proxy setzen ...

Also fuhr ich mit der manuellen Installation der fehlenden Komponente evdev fort:

  1. evdev von PyPI herunterladen (oder beispielsweise von github.com):

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

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

  2. Auspacken und manuell als root user installieren - für alle lokalen Konten, die als installiert erkannt werden:

    Sudo su -

    tar xf evdev-1.1.2.tar.gz

    cd evdev-1.1.2

    python setup.py installieren

  3. Rufen Sie das Installationsskript erneut auf:

    adafruit-pitft.sh # oder pitft.sh

    ... Dialoge beantworten ...

    ...das ist es.

Wenn Sie online durch direkten Zugriff auf PyPI fortfahren:

  1. Überprüfen Sie Ihre Routing + Firewall auf Zugriff auf pypi.org

  2. legen Sie ggf. einen Proxy fest (http_proxy/https_proxy)

Und es funktioniert..

Hoffe, das hilft auch in anderen Fällen.

Arno-Can Uestuensoez

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

Siehe auch: Ausgabe - 35334: https://bugs.python.org/issue35334

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

Siehe auch: Ausgabe - 1486: https://github.com/urllib3/urllib3/issues/1486

für die Datei: https://github.com/urllib3/urllib3/blob/master/src/urllib3/util/retry.py

1
acue

Ich habe die Lösung ausprobiert:

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

Als ich es versuchte 

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

Ich habe diese Nachricht erhalten

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

Ich habe folgendes getan und es funktioniert 

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
1
i_th

Ich habe diese Fehlermeldung erhalten, als ich versuchte, eine virtualenv mit dem Befehl virtualenv myVirtualEnv zu erstellen. Ich habe gerade eine Sudo vor dem Befehl hinzugefügt. es hat alles gelöst.

1

Beim Versuch, das awscli-Tool auf der ec2-Instanz zu installieren, stand ich vor einem ähnlichen Problem. __ Ich änderte die Sicherheitsgruppe, um den eingehenden und ausgehenden Zugriff von Port 443 zuzulassen.

0
Yogesh Gupta

Für mich stellt sich heraus, dass wlan0 nicht verfügbar war, was dazu führte, dass ich keine Verbindung herstellen konnte. Wenn Sie also sicherstellen, dass wlan0 aktiv ist, können pip/pip3 ohne Probleme funktionieren.

0
japharl

Dies ist die funktionierende Lösung für dieses Problem, das ich gefunden habe.

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
PSN

Lösung:
1. Sudo apt remove python-pip
2. pip3 install pip (oder installiere pip von get-pip.py )

Warum:
Dieser Fehler trat auf Pip 8.0.1 auf, der von apt-get installiert wurde. Und nur passiert, wenn Ihr Netzwerk instabil ist. 

Wenn Sie einen Pip mit apt installiert haben, wird der von Ihnen installierte Pip auf andere Weise ausgeblendet, sodass Sie den apt zuerst entfernen sollten. 

Ich habe die Netzwerkverbindung getrennt und 8.0.1, 9.0.3, 10.x die 3 Versionen getestet, die mit pip3 oder get-pip.py installiert wurden. Es ist kein Fehler aufgetreten. Ich denke, nur die apt-Version von pip 8.0.1 hat diesen Fehler, die anderen sind in Ordnung.

0
Haocheng Yang

In meinem Fall hatte ich Pycharm im Sudo-Modus geöffnet und lief pip install nltk im pycharm-Terminal, das diesen Fehler zeigte. Das Ausführen mit Sudo Pip Install behebt den Fehler.

0
Aayush Arora

Ich hatte auch dieses Problem. Anfangs wurde ein Proxy gesetzt und funktioniert einwandfrei. Dann habe ich mich mit einem Netzwerk verbunden, in dem es keinen Proxy gibt. Nachdem Sie Proxy-Pip wieder deaktiviert haben, funktionieren Sie.

unset http_proxy; unset http_prox;  unset HTTP_PROXY; unset HTTPS_PROXY
0
GPrathap

Wenn ich den Proxy aus der Umgebung entferne und zur Befehlszeile hinzufüge, funktioniert das für mich. Zum Beispiel, um pip selbst zu aktualisieren:

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

Mein Problem war, den Proxy in der Umgebung zu haben. Es scheint, dass pip nur die Argumentation ehrt.

0
Eric