Użycie pip install
dla dowolnego modułu widocznie w moim systemie Ubuntu 16.04 z Pythonem 2.7.11+ powoduje zgłoszenie tego błędu:
TypeError: unsupported operand type(s) for -=: 'Retry' and 'int'
Co jest nie tak z pipem? Jak mogę go ponownie zainstalować, jeśli to konieczne?
Aktualizacja: Pełne śledzenie znajduje się poniżej
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'
pip
normalnie użyłbyrequests
pakietu osadzonego irequests
normalnie użyłbyurllib3
pakietu osadzonego . Te koła nie są wersjami osadzonymi i prawdopodobnie są niekompatybilne zpip
podklasą części tego kodu./usr/share/python-wheels
może odsunąć się na bok?pip
się użyćpip/_vendor/requests/
ipip/_vendor/requests/packages/urllib3/
, nie/usr/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requests
lub/usr/share/python-wheels/urllib3-1.13.1-py2.py3-none-any.whl/urllib3
.requests
ipip
osadzaj ich zależności. Twoje śledzenie pokazuje, że żadne wbudowane wersje nie są używane, ale dlaczego tak jest, nie wiem.Odpowiedzi:
Ubuntu zawiera wersję PIP z prekambrianu i dlatego musisz ją zaktualizować, jeśli nie chcesz spędzać godzin na debugowaniu problemów związanych z pip.
Jak zauważyłeś, dołączyłem informacje zarówno dla Pythona 2.x, jak i 3.x
źródło
pip
które nie zostało naprawione od kilku wydań: github.com/pypa/pip/issues/4779Jeśli korzystasz z serwera proxy, przed rozpoczęciem instalacji musisz wykonać dodatkowe czynności konfiguracyjne. Musisz ustawić zmienną środowiskową http_proxy na adres proxy. Używając basha, można to zrobić za pomocą polecenia
Możesz również podać
parametr do pip.
[user:pass@]
Część jest opcjonalne.źródło
Aktualizacja setuptools wyszła mi dobrze.
źródło
Przede wszystkim ten problem występuje z powodu problemów z siecią, a odinstalowanie i ponowne zainstalowanie wszystkiego nie będzie zbyt pomocne. Prawdopodobnie znajdujesz się za proxy iw takim przypadku musisz ustawić proxy.
Ale w moim przypadku miałem problem, ponieważ nie korzystałem z serwera proxy. Generalnie pracuję za proxy, ale podczas pracy w domu ustawiam proxy na Brak w ustawieniach sieci.
Ale nadal otrzymywałem te same błędy, nawet po usunięciu ustawień proxy.
Więc kiedy pisałem
Znalazłem coś takiego:
I to był powód, dla którego nadal otrzymywałem ten sam błąd, nawet gdy myślałem, że usunąłem ustawienia proxy.
Aby usunąć ten serwer proxy, wpisz
Postępuj w ten sam sposób w przypadku wszystkich innych wpisów, takich jak https_proxy.
źródło
Dzieje się tutaj tak, że wersje request / urllib3 sprzedawane kolidują po zaimportowaniu w dwóch różnych miejscach (ten sam kod, ale różne nazwy). Jeśli następnie wystąpi błąd sieci, nie będzie ponawiać próby pobrania kierownicy, ale zakończy się niepowodzeniem z powyższym błędem. Zobacz tutaj, aby dokładniej zapoznać się z tym błędem.
Rozwiązanie z systemem pip, patrz powyżej .
Jeśli masz ten problem w virtualenv zbudowanym przez
python -m venv
(który nadal kopiuje koła/usr/share/python-wheels
, nawet jeśli masz zainstalowany oddzielnie pip), najłatwiejszym sposobem "naprawy" wydaje się być:/usr/bin/python3.6 -m venv ...
requests
w środowisku (może to spowodować powyższy błąd):<venv>/bin/pip install requests
requests
które będą używane przez pip:rm <venv>/share/python-wheels/{requests,chardet,urllib3}-*.whl
Teraz a
<venv>/bin/pip
używa zainstalowanej wersji,requests
której sprzedał urllib3.źródło
/usr/share/python-wheels/urllib3-1.19.1-py2.py3-none-any.whl
i teraz jest naprawione (bez virtualenv)./usr/share/python-wheels
,python -m venv
nie utworzy<venv>/bin/pip
już użytecznych . Więc jeśli usuniesz te pliki, powinieneś być pewien, że ich nie potrzebujesz. Jeśli potrzebujesz zarówno systemowego pip, jak i venv pip, musisz zainstalować systemowy zget-pip.py
(patrz stackoverflow.com/a/37531821/1380673 ) i musisz usunąć pliki whl z każdego venv.port 443 nie jest otwarty, po prostu zezwól na niestandardowy port 443 tcp, jeśli na AWS w innym przypadku otwórz port 443 dla połączeń wychodzących ...
źródło
Po prostu uaktualnij pip działał dla mnie:
pip install --upgrade pip
źródło
Mam ten sam problem podczas instalacji RaspberryPI TFT od Adafruit z pitft.sh / adafruit-pitft.sh .
Nie podoba mi się kodowanie stylów z błędami skądś, które można jakoś zinterpretować - jak widać po poprzednich odpowiedziach.
Uwaga: Wyjątek błędu typu w retry.py jest oczywiście błędem spowodowanym niewłaściwym przypisaniem i obliczeniem instancji klasy Odpowiedz na int z domyślną wartością 10 - gdzieś w kodzie ... Powinien zostać również naprawiony dodając operator w miejscu lub naprawiając błędne przypisanie.
Więc najpierw próbował przeanalizować i załatać sam błąd. Rzeczywisty błąd w moim przypadku jest taki sam - wywołanie retry.py przez pip .
Skrypt instalacyjny adafruit-pitft.sh / pitft.sh próbuje zastosować urllib3, który sam próbuje zainstalować zagnieżdżone zależności przez pip , więc ten sam błąd.
https://github.com/adafruit/Raspberry-Pi-Installer-Scripts/blob/master/adafruit-pitft.sh
https://github.com/adafruit/Raspberry-Pi-Installer-Scripts
Dla aktualnej dystrybucji (opartej na debian-9.6.0 / stretch):
Następujące - dirty * :) - patch włącza brzmiące śledzenie błędów:
Brzmiący wynik z tymczasową poprawką to (wyświetlany dwukrotnie ...?):
Więc w moim przypadku dwie rzeczy powodują błąd, może się to różnić w innych środowiskach:
Moje środowisko instalacyjne jest offline z wewnętrznego mirrora debian + raspbian, więc nie chcę ustawiać proxy ...
Więc przystąpiłem do ręcznej instalacji brakującego komponentu evdev :
pobierz evdev z PyPI (lub np. z github.com):
https://pypi.org/project/evdev/
https://files.pythonhosted.org/packages/7e/53/374b82dd2ccec240b7388c65075391147524255466651a14340615aabb5f/evdev-1.1.2.tar.gz
Rozpakuj i zainstaluj ręcznie jako użytkownik root - dla wszystkich kont lokalnych, więc wykryte jako zainstalowane:
Wywołaj ponownie skrypt instalacyjny:
Jeśli przejdziesz przez Internet przez bezpośredni dostęp PyPI :
sprawdź swój routing + firewall, aby uzyskać dostęp do pypi.org
ustaw proxy, jeśli jest to wymagane (http_proxy / https_proxy)
I to działa ...
Mam nadzieję, że to pomoże również w innych przypadkach.
Arno-Can Uestuensoez
----------------------------------------------
Zobacz też: wydanie - 35334: https://bugs.python.org/issue35334
----------------------------------------------
Zobacz teraz także: wydanie - 1486: https://github.com/urllib3/urllib3/issues/1486
dla pliku: https://github.com/urllib3/urllib3/blob/master/src/urllib3/util/retry.py
źródło
sprawdź problemy z siecią, aby ominąć kod przypadku wyjątku
W moim przypadku korzystałem z indeksu niestandardowego, który nie miał trasy, a taki wywołałby kod przypadku wyjątku. Błąd przypadku wyjątku nadal istnieje i nadal maskuje prawdziwy problem, jednak udało mi się go obejść, testując łączność z innymi narzędziami, takimi jak
nc -vzw1 myindex.example.org 443
i ponawiając próbę, gdy sieć działała.źródło
Miałem podobny problem podczas próby zainstalowania narzędzia awscli na instancji ec2. Zmieniłem grupę zabezpieczeń, aby zezwolić na dostęp przychodzący i wychodzący na porcie 443 i to rozwiązało problem.
źródło
Otrzymałem ten błąd, gdy próbowałem utworzyć
virtualenv
polecenie za pomocąvirtualenv myVirtualEnv
. Właśnie dodałemsudo
przed poleceniem; rozwiązał wszystko.źródło
Rozwiązanie:
1.
sudo apt remove python-pip
2.
pip3 install pip
(lub zainstaluj pip przez get-pip.py )Dlaczego:
Ten błąd wystąpił w pip 8.0.1 zainstalowanym przez apt-get. I stało się tylko wtedy, gdy twoja sieć jest niestabilna.
Jeśli masz zainstalowany pip z apt, ukrywa on zainstalowany przez ciebie pip w inny sposób, więc powinieneś najpierw usunąć apt.
Odłączyłem sieć i przetestowałem 8.0.1, 9.0.3, 10.x 3 wersje zainstalowane z pip3 lub get-pip.py, nie wystąpił błąd. Więc myślę, że tylko apt wersja pip 8.0.1 ma ten błąd, inne są w porządku.
źródło
W moim przypadku otworzyłem Pycharm w trybie sudo i uruchomiłem pip install nltk w terminalu pycharm, który pokazał ten błąd. uruchomienie z instalacją sudo pip rozwiązuje błąd.
źródło
Ja też miałem ten problem. Początkowo proxy było ustawione i działa dobrze. Następnie połączyłem się z siecią, w której nie przechodzi przez proxy. Po rozbrojeniu proxy pip ponownie pobierz działa.
źródło
Dziwnie, jeśli usunę proxy ze środowiska i dodam go do wiersza poleceń, to działa. Na przykład, aby zaktualizować
pip
się:Mój problem polegał na tym, że serwer proxy był w środowisku. Wygląda na to, że pip honoruje tylko argumentującego.
źródło
To jest działające rozwiązanie tego problemu, które znalazłem.
źródło
Dla mnie okazuje się, że wlan0 nie działa, przez co nie mogę się połączyć. Tak więc, upewniając się, że wlan0 działa, pozwolono pip / pip3 na bezproblemową pracę.
źródło
Wypróbowałem rozwiązanie, na które odpowiedziano powyżej:
Kiedy próbowałem
Dostałem tę wiadomość
Wykonałem następujące czynności i działa
źródło