Python PIP Yüklemesi TypeError'ı atar: - =: 'Yeniden dene' ve 'int' için desteklenmeyen işlenen türleri


107

pip installPython 2.7.11+ ile Ubuntu 16.04 sistemimde herhangi bir modül için kullanmak bu hatayı atar:

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

Pip'in nesi var? Gerekirse nasıl yeniden yükleyebilirim?

Güncelleme: Tam izleme aşağıdadır

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 Elbette, bu bilgiyi
ekliyor

Peki bu tekerlekler nereden geldi? pipnormalde gömülü bir requestspaket kullanır ve requestsnormalde gömülü bir urllib3paket kullanır. Bu tekerlekler gömülü sürümler değildir ve muhtemelen pipbu kodun bazılarının alt sınıfıyla uyumlu değildir . hareket /usr/share/python-wheelsbelki bir kenara?
Martijn Pieters

Ben beklediğiniz pipkullanmak pip/_vendor/requests/ve pip/_vendor/requests/packages/urllib3/değil /usr/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requestsya /usr/share/python-wheels/urllib3-1.13.1-py2.py3-none-any.whl/urllib3.
Martijn Pieters

Bunun hakkında hiçbir fikrim yok! Bu konuda nereden bilgi aramalıyım veya ne yapabilirim?
devautor

Üzgünüm, burada kolay cevap yok; sadece sorunlarınızı teşhis etmeye çalışıyorum. İzleme beklenmiyor ve sürümler arasında bir çatışmaya işaret ediyor. Bu yüzden normal requestsve pipbağımlılıklarını gömün. Geri bildiriminiz, gömülü sürümlerin kullanılmadığını gösteriyor, ancak bunun nedenini bilmiyorum.
Martijn Pieters

Yanıtlar:


87

Ubuntu, prekambrian'dan bir PIP sürümü ile birlikte gelir ve bu şekilde, pip ile ilgili sorunları ayıklamak için saatler ve saatler harcamak istemiyorsanız, onu yükseltmeniz gerekir.

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

Gözlemlediğiniz gibi hem Python 2.x hem de 3.x için bilgiler ekledim


2
Python get-pip.py yapıldığında bu "OSError: [Errno 13] İzin reddedildi: '/usr/local/lib/python2.7/site-packages/pip-8.1.2.dist-info'"
geliştirici

2
@mirror, sudo kullanın çünkü get-pip.py pip yüklemeyi deneyecek
Raghuram Vadapalli

45
Bu sorunun pip ile ilgisi yok. yığın izleme, paketi alma isteğinin başarısız olduğunu gösterir ve bir ağ sorunu olduğunu gösterir. OP'ye pip'i yeniden yüklemesini söylemek sadece bir dolambaçlı yol olacaktır.
Thom

2
Bu doğru cevap, suçlu kurallı yama olan pipşimdi çok sürüm için sabitlenmemiş kalır etti: github.com/pypa/pip/issues/4779
lurscher

2
Raspberya'da kullandım. Artık "pip" çalıştırılamıyordu. Yalnızca pip3 çalıştırılabilir. Sembolik bir bağlantı eklemek zorunda kaldım: ln -s / usr / local / bin / pip / usr / bin / pip bu yanıttan alındı ​​(ve değiştirildi): stackoverflow.com/questions/29712519/…
TheTrowser

37

Bir proxy'nin arkasındaysanız, kuruluma başlamadan önce bazı ekstra yapılandırma adımları gerçekleştirmeniz gerekir. Http_proxy ortam değişkenini proxy adresine ayarlamalısınız. Bash kullanarak bu, komutla gerçekleştirilir.

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

Ayrıca şunları da sağlayabilirsiniz:

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

parametre pip. [user:pass@]Kısmı isteğe bağlıdır.


25

Kurulum araçlarını güncellemek benim için iyi sonuç verdi.

sudo pip install --upgrade setuptools

Benim için de çalıştı. Aslında, bunu yaptıktan sonra, hataların daha sonra ortaya çıktığını fark ettim: Kurulum araçlarını toplama (kiwisolver> = 1.0.1-> matplotlib'den)
mayid

3
Bu benim için bir Raspian Stretch'te de çalıştı.
Bulmayı

raspbian ile çalışmak için bundan sonra yeniden başlatılması gerekiyor
Pipo

4
Bu komut Debian9'da benim için aynı TypeError'a neden oluyor. Bu evrensel bir çözüm değil.
sir__finley

15

Her şeyden önce, bu sorun ağ sorunları nedeniyle var ve her şeyi kaldırıp yeniden yüklemek çok yardımcı olmayacak. Muhtemelen proxy'nin arkasındasınız ve bu durumda proxy ayarlamanız gerekiyor.

Ama benim durumumda sorunla karşı karşıyaydım çünkü vekaletnamenin arkasında değildim. Genelde proxy arkasında çalışıyorum, ancak evden çalışırken proxy'yi Ağ ayarlarında Yok olarak ayarlıyorum.

Ancak proxy ayarlarını kaldırdıktan sonra bile aynı hataları alıyordum.

Yani, yazdığım zaman

env | grep proxy

Bunun gibi bir şey buldum:

http_proxy=http://127.0.0.1:1234/

Proxy ayarlarını kaldırdığımı düşündüğümde bile hala aynı hatayı almamın nedeni buydu.

Bu proxy'nin ayarını kaldırmak için yazın

unset http_proxy

Https_proxy gibi diğer tüm girişler için aynı yaklaşımı izleyin.


14

Burada olan şey, request / urllib3'ün satıcı sürümlerinin iki farklı yere (aynı kod, ancak farklı isimler) içe aktarıldığında çakışmasıdır. Daha sonra bir ağ hatasıyla karşılaşırsanız, tekerleği almaya çalışmaz, ancak yukarıdaki hata ile başarısız olur. Bu hatayla ilgili daha ayrıntılı bilgi için buraya bakın .

Sistem pipli çözüm için yukarıya bakın .

Bu sorunu bir virtualenv tarafından oluşturulmuş bir sanal ortamda yaşıyorsanız python -m venv(yine de tekerlekleri kopyalar, /usr/share/python-wheelspip'i ayrı olarak kurmuş olsanız bile), "düzeltmenin" en kolay yolu şöyle görünüyor:

  1. virtualenv'i oluşturun: /usr/bin/python3.6 -m venv ...
  2. requestsortama yükleyin (bu, yukarıdaki hatayı artırabilir):<venv>/bin/pip install requests
  3. requestspip tarafından kullanılacak kopyalanmış sürümleri kaldırın :rm <venv>/share/python-wheels/{requests,chardet,urllib3}-*.whl

Şimdi , urllib3 satıcısına sahip olan <venv>/bin/pipyüklü sürümü requestskullanıyor.


Teşekkürler, bunu yeni kaldırdım /usr/share/python-wheels/urllib3-1.19.1-py2.py3-none-any.whlve şimdi düzeltildi (virtualenv olmadan).
krsoni

Aslında benim durumumda, sanal env kullanmıyordum.
krsoni

Eğer doğrudan whl dosyaları kaldırırsanız /usr/share/python-wheels, python -m venvbir kullanışlı oluşturmaz <venv>/bin/pip artık. Dolayısıyla, bu dosyaları kaldırırsanız ihtiyacınız olmadığından emin olmalısınız. Hem bir sistem pipine hem de bir venv pipine ihtiyacınız varsa, sistemi bir tane get-pip.py(Bkz. Stackoverflow.com/a/37531821/1380673 ) kurmanız ve her venv'deki whl dosyalarını kaldırmanız gerekir.
Jan Katins

7

bağlantı noktası 443 açık değil, AWS üzerindeyse özel tcp bağlantı noktası 443'e izin verin, aksi takdirde giden bağlantılar için 443 numaralı bağlantı noktasını açın ...


Bu, OpenStack kümemde bana büyük zaman kazandırdı !! İyi olan Deepak!
Arun Das

5

Sadece yükseltme pip benim için çalıştı:

pip install --upgrade pip


5
Bu çok kesin komutu :( çalışırken hata benim başıma
allan.simon

Raspbian Sketch Lite'ta benim için hatayı düzeltti.
Raúl Salinas-Monteagudo

1
Ayrıca Raspian Stretch Lite çalıştırıyorum ve bu hatayı düzeltmedi.
Stefan Wegener

Bunun çok güzel çalıştığına katılıyorum "python -m pip install --upgrade pip"
imbatman

2

Pitft.sh / adafruit-pitft.sh ile Adafruit'tan bir RaspberryPI TFT kurarken de aynı sorunu yaşıyorum .

Önceki cevaplarda da görülebileceği gibi, bir yerden gelen hataları olan kodlama stillerinin bir şekilde yorumlanmasından memnun değilim.

Remark: type hatası istisna retry.py besbelli sınıf örneğine bir unappropriate assignement ve hesaplama kaynaklanan bir hata olduğu Yanıtla bir karşı int varsayılan değeri ile 10 - kodunda bir yerde ... ya sabittir olmalı Yerinde operatör ekleyerek veya hatalı atamayı düzelterek.

Bu yüzden önce hatayı analiz etmeye ve düzeltmeye çalıştım. Benim durumumdaki gerçek hata aynı - pip tarafından çağrılan retry.py .

Adafruit-pitft.sh / pitft.sh yükleme betiği , pip ile iç içe geçmiş bağımlılıkları yüklemeye çalışan urllib3'ü uygulamaya çalışır , bu nedenle aynı hata.

adafruit-pitft.sh # veya pitft.sh

...

_stacktrace = sys.exc_info () [2]) Dosya "/usr/share/python-wheels/urllib3-1.13.1-py2.py3 none-any.whl / urllib3 / util / retry.py", satır 228, içinde artış

toplam - = 1

TypeError: - =: 'Yeniden dene' ve 'int' için desteklenmeyen işlenen türleri

Mevcut dağıtım için (debian-9.6.0 / stretch'e göre):

"/Usr/share/python-wheels/urllib3-1.19.1-py2.py3-none-any.whl/urllib3/util/retry.py" dosyası, satır 315, artımlı

toplam - = 1

TypeError: - =: 'Yeniden dene' ve 'int' için desteklenmeyen işlenen türleri

Aşağıdaki - dirty * :) - yaması, bir sondaj hatası izlemesini etkinleştirir:

# 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

Geçici yama ile sondaj çıkışı (iki kez görüntülenir ...?):

Bağlantının 'ConnectTimeoutError (<request.packages.urllib3.connection.VerifiedHTTPSConnection nesnesi /

Bağlantının 'ConnectTimeoutError (<request.packages.urllib3.connection.VerifiedHTTPSConnection nesnesi /

Evdev gereksinimini karşılayan bir sürüm bulunamadı (sürümlerden:)

Evdev için eşleşen dağıtım bulunamadı

UYARI: Pip yazılımı yükleyemedi!

Yani benim durumumda aslında iki şey hataya neden oluyor, bu diğer ortamlarda değişebilir:

  1. Eksik evdev => yüklemeyi deneyin
  2. İndirmek için evdev içeren bir repo / dist bağlanamadı . => sonunda vazgeç

Kurulum ortamım dahili bir debian + raspbian aynasından çevrimdışı, bu nedenle proxy'yi ayarlamak istemiyorum ...

Bu yüzden eksik bileşen evdev'in manuel kurulumuyla devam ettim :

  1. evdev'i PyPI'den indirin (veya örneğin github.com'dan):

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

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

  2. Paketini açın ve manuel olarak kök kullanıcı olarak kurun - tüm yerel hesaplar için, kurulu olarak algılanan hesaplar için:

    sudo su -

    tar xf evdev-1.1.2.tar.gz

    cd evdev-1.1.2

    python setup.py install

  3. Yükleme komut dosyasını tekrar arayın:

    adafruit-pitft.sh # veya pitft.sh

    ... Cevap diyalogları ...

    ...bu kadar.

Doğrudan PyPI erişimiyle çevrimiçi devam ederseniz :

  1. pypi.org'a erişim için yönlendirme + güvenlik duvarınızı kontrol edin

  2. gerekirse bir proxy ayarlayın (http_proxy / https_proxy)

Ve çalışıyor..

Umarım bu başka durumlarda da yardımcı olur.

Arno-Can Uestuensoez

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

Ayrıca bkz: issue - 35334: https://bugs.python.org/issue35334

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

Şimdi de bakın: issue - 1486: https://github.com/urllib3/urllib3/issues/1486

dosya için: https://github.com/urllib3/urllib3/blob/master/src/urllib3/util/retry.py


2

istisna durum kodunu atlamak için ağ sorunlarını kontrol edin

Benim durumumda, özel bir dizin kullanıyordum, bu dizinin rotası yoktu ve bu, istisna durum kodunu tetikleyecekti. İstisna durum hatası hala var ve gerçek sorunu hala maskeliyor, ancak nc -vzw1 myindex.example.org 443ağ açıkken ve yeniden denemek gibi diğer araçlarla bağlantıyı test ederek bu sorunu çözmeyi başardım .


1

Ec2 örneğine awscli aracı yüklemeye çalışırken benzer bir sorunla karşılaşıyordum. Güvenlik grubunu 443 numaralı bağlantı noktasının gelen ve giden erişimine izin verecek şekilde değiştirdim ve bu benim için sorunu çözdü.


Bu soruya bir cevap vermiyor. Yeterli itibara sahip olduğunuzda , herhangi bir gönderi hakkında yorum yapabileceksiniz ; bunun yerine soruyu soranın açıklamasını gerektirmeyen yanıtlar verin . - Yorumdan
Lukas Körfer

1
Şimdi daha iyi görünüyor mu? Yararlı bulduğum şeyden bahsetmem gerektiğini düşündüm
Yogesh Gupta

1

Bu hatayı virtualenvkomut ile bir komut oluşturmaya çalışırken aldım virtualenv myVirtualEnv. Komuttan önce bir ekledim sudo; her şeyi çözdü.


Çözüm değil: Docker'da root olarak çalışıyorum ve aynı sorunu yaşıyorum. Ayrıca root olarak çalıştırmanın neden yardımcı olduğunu açıklamıyorsun.
Eric

1
@Eric, sadece dene ve hata yaklaşımını kullandım; Altta yatan amacı bilmiyorum. Benim için çalıştı, ben de önerdim.
Zeinab Abbasimazar

1

Çözüm:
1. sudo apt remove python-pip
2. pip3 install pip(veya get-pip.py ile pip'i kurun )

Neden:
Bu hata apt-get tarafından kurulan pip 8.0.1'de oluştu. Ve yalnızca ağınız kararsız olduğunda oldu.

Eğer apt ile kurulmuş bir pip'iniz varsa, kurduğunuz pipi başka yollarla gizler, bu yüzden önce uygun olanı çıkarmanız gerekir.

Ağın bağlantısını kestim ve pip3 veya get-pip.py ile kurulan 8.0.1, 9.0.3, 10.x sürümlerini test ettim, hata oluşmadı. Bence sadece pip 8.0.1'in apt sürümünde bu hata var, diğerlerinde sorun yok.


1

Benim durumumda, Pycharm'ı sudo modunda açtım ve bu hatayı gösteren pycharm terminalinde pip install nltk çalıştırıyordum. sudo pip install ile çalıştırmak hatayı çözer.


0

Ben de bu sorunu yaşadım. Başlangıçta bir proxy kuruldu ve iyi çalışıyordu. Sonra proxy'den geçmeyen bir ağa bağlandım. Proxy pip'i kaldırdıktan sonra tekrar çalışır.

unset http_proxy; unset http_prox;  unset HTTP_PROXY; unset HTTPS_PROXY

0

Tuhaf bir şekilde proxy'yi ortamdan kaldırırsam ve benim için çalıştığı komut satırına eklersem. Örneğin pipkendini yükseltmek için :

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

Sorunum ortamda proxy olmasıydı. Görünüşe göre pip sadece tartışmadaki kişiyi onurlandırıyor.


0

Bulduğum bu sorunun çalışma çözümü budur.

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

Kendim için, wlan0'ın çalışmadığı ortaya çıktı, bu da benim bağlantı kuramamama neden oldu. Böylece, wlan0'ın açık olduğundan emin olmak, pip / pip3'ün sorunsuz çalışmasına izin verdi.


0

Yukarıda cevaplanan çözümü denedim:

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

Denediğimde

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

Bu mesajı aldım

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

Aşağıdakini yaptım ve işe yarıyor

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.