Menggunakan pip install
untuk modul apa pun tampaknya pada sistem Ubuntu 16.04 saya dengan python 2.7.11+ membuat kesalahan ini:
TypeError: unsupported operand type(s) for -=: 'Retry' and 'int'
Apa yang salah dengan pip? Bagaimana saya bisa menginstal ulang, jika perlu?
Pembaruan: Penelusuran balik penuh ada di bawah
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
biasanya akan menggunakanrequests
paket tertanam , danrequests
biasanya akan menggunakanurllib3
paket tertanam . Roda tersebut bukan versi yang disematkan, dan mungkin tidak kompatibel denganpip
subkelas dari beberapa kode ini. bergerak/usr/share/python-wheels
ke samping mungkin?pip
untuk menggunakanpip/_vendor/requests/
danpip/_vendor/requests/packages/urllib3/
, bukan/usr/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requests
atau/usr/share/python-wheels/urllib3-1.13.1-py2.py3-none-any.whl/urllib3
.requests
danpip
embed dependensinya. Pelacakan balik Anda menunjukkan bahwa versi tersemat tidak digunakan, tetapi mengapa saya tidak tahu.Jawaban:
Ubuntu hadir dengan versi PIP dari precambrian dan begitulah cara Anda memutakhirkannya jika Anda tidak ingin menghabiskan berjam-jam men-debug masalah terkait pip.
Seperti yang Anda amati, saya menyertakan informasi untuk Python 2.x dan 3.x
sumber
pip
yang tetap tidak diperbaiki untuk beberapa rilis sekarang: github.com/pypa/pip/issues/4779Jika Anda berada di belakang proxy, Anda harus melakukan beberapa langkah konfigurasi tambahan sebelum memulai penginstalan. Anda harus menyetel variabel lingkungan http_proxy ke alamat proxy. Menggunakan bash ini dilakukan dengan perintah
Anda juga bisa menyediakan
parameter ke pip. The
[user:pass@]
porsi opsional.sumber
Memperbarui alat pengaturan telah berhasil dengan baik untuk saya.
sumber
Pertama-tama, masalah ini muncul karena masalah jaringan, dan menghapus dan menginstal ulang semuanya tidak akan banyak membantu. Mungkin Anda berada di belakang proxy, dan dalam hal ini Anda perlu menyetel proxy.
Tetapi dalam kasus saya, saya menghadapi masalah karena saya tidak berada di belakang proxy. Secara umum, saya bekerja di belakang proxy, tetapi ketika bekerja dari rumah, saya mengatur proxy ke Tidak ada di pengaturan Jaringan.
Tetapi saya masih mendapatkan kesalahan yang sama bahkan setelah menghapus pengaturan proxy.
Jadi, saat saya mengetik
Saya menemukan sesuatu seperti ini:
Dan inilah alasan mengapa saya masih mendapatkan kesalahan yang sama, bahkan ketika saya pikir saya telah menghapus pengaturan proxy.
Untuk menghapus proxy ini, ketik
Ikuti pendekatan yang sama untuk semua entri lainnya, seperti https_proxy.
sumber
Apa yang terjadi di sini adalah bahwa versi permintaan / urllib3 yang berjualan bentrok ketika diimpor di dua tempat berbeda (kode yang sama, tetapi nama berbeda). Jika Anda kemudian mengalami kesalahan jaringan, itu tidak mencoba lagi untuk mendapatkan roda, tetapi gagal dengan kesalahan di atas. Lihat di sini untuk mendalami kesalahan ini lebih dalam.
Untuk solusi dengan pip sistem, lihat di atas .
Jika Anda memiliki masalah ini di virtualenv yang dibangun oleh
python -m venv
(yang masih menyalin roda dari/usr/share/python-wheels
, bahkan jika Anda memasang pip secara terpisah), cara termudah untuk "memperbaikinya" tampaknya adalah:/usr/bin/python3.6 -m venv ...
requests
ke lingkungan (ini mungkin menimbulkan kesalahan di atas):<venv>/bin/pip install requests
requests
yang akan digunakan oleh pip:rm <venv>/share/python-wheels/{requests,chardet,urllib3}-*.whl
Sekarang a
<venv>/bin/pip
menggunakan versi terinstalrequests
yang memiliki vendor urllib3.sumber
/usr/share/python-wheels/urllib3-1.19.1-py2.py3-none-any.whl
dan sudah diperbaiki sekarang (tanpa virtualenv)./usr/share/python-wheels
,python -m venv
tidak akan bisa digunakan<venv>/bin/pip
lagi. Jadi, jika Anda menghapus file-file ini, Anda harus yakin bahwa Anda tidak membutuhkannya. Jika Anda memang membutuhkan pip sistem dan pip venv, Anda perlu menginstal sistem denganget-pip.py
(Lihat stackoverflow.com/a/37531821/1380673 ) dan Anda perlu menghapus file whl di setiap venv.port 443 tidak terbuka, cukup izinkan port tcp kustom 443 jika di AWS lain buka port 443 untuk koneksi keluar ...
sumber
Tingkatkan saja pip yang berhasil untuk saya:
pip install --upgrade pip
sumber
Saya memiliki masalah yang sama saat menginstal RaspberryPI TFT dari Adafruit dengan pitft.sh / adafruit-pitft.sh .
Saya tidak senang dengan gaya pengkodean dengan kesalahan dari suatu tempat untuk ditafsirkan entah bagaimana - seperti yang bisa dilihat pada jawaban sebelumnya.
Catatan: Pengecualian kesalahan jenis retry.py jelas merupakan bug, yang disebabkan oleh tugas dan kalkulasi yang tidak tepat dari sebuah instance kelas. Balas ke int dengan nilai default 10 - di suatu tempat dalam kode ... Harus diperbaiki baik dengan menambahkan operator-di tempat, atau memperbaiki tugas yang salah.
Jadi cobalah menganalisis dan menambal kesalahan itu sendiri terlebih dahulu. Kesalahan sebenarnya dalam kasus saya adalah sama - retry.py dipanggil oleh pip .
Skrip instalasi adafruit-pitft.sh / pitft.sh mencoba menerapkan urllib3 yang dengan sendirinya mencoba menginstal dependensi bersarang dengan pip , jadi kesalahan yang sama.
https://github.com/adafruit/Raspberry-Pi-Installer-Scripts/blob/master/adafruit-pitft.sh
https://github.com/adafruit/Raspberry-Pi-Installer-Scripts
Untuk distribusi saat ini (berdasarkan debian-9.6.0 / stretch):
Patch berikut - dirty * :) - memungkinkan jejak kesalahan yang terdengar:
Output yang terdengar dengan tambalan sementara (ditampilkan dua kali ...?):
Jadi dalam kasus saya sebenarnya ada dua hal yang menyebabkan kesalahan, ini mungkin berbeda di lingkungan lain:
Lingkungan instalasi saya offline dari cermin debian + raspbian internal, jadi saya tidak ingin mengatur proxy ...
Jadi saya melanjutkan dengan instalasi manual dari komponen evdev yang hilang :
unduh evdev dari PyPI (atau misalnya dari github.com):
https://pypi.org/project/evdev/
https://files.pythonhosted.org/packages/7e/53/374b82dd2ccec240b7388c65075391147524255466651a14340615aabb5f/evdev-1.1.2.tar.gz
Buka kemasan dan instal secara manual sebagai pengguna root - untuk semua akun lokal, sehingga terdeteksi sebagai terinstal:
Panggil skrip instal lagi:
Jika Anda melanjutkan online dengan akses PyPI langsung :
periksa perutean + firewall Anda untuk akses ke pypi.org
setel proxy jika diperlukan (http_proxy / https_proxy)
Dan berhasil ..
Semoga ini bisa membantu dalam kasus lain juga.
Arno-Can Uestuensoez
----------------------------------------------
Lihat juga: issue - 35334: https://bugs.python.org/issue35334
----------------------------------------------
Lihat sekarang juga: masalah - 1486: https://github.com/urllib3/urllib3/issues/1486
untuk file: https://github.com/urllib3/urllib3/blob/master/src/urllib3/util/retry.py
sumber
periksa masalah jaringan, untuk melewati kode kasus pengecualian
Dalam kasus saya, saya menggunakan indeks khusus, indeks tersebut tidak memiliki rute dan itu akan memicu kode kasus pengecualian. Bug kasus pengecualian masih ada dan masih menutupi masalah sebenarnya, namun saya dapat mengatasinya dengan menguji konektivitas dengan alat lain seperti
nc -vzw1 myindex.example.org 443
dan mencoba lagi ketika jaringan sudah aktif.sumber
Saya menghadapi masalah serupa ketika mencoba menginstal alat awscli pada contoh ec2. Saya mengubah grup keamanan untuk mengizinkan akses masuk dan keluar port 443 dan itu memecahkan masalah bagi saya.
sumber
Saya mendapat kesalahan ini ketika saya mencoba membuat
virtualenv
dengan perintahvirtualenv myVirtualEnv
. Saya baru saja menambahkansudo
sebelum perintah; itu memecahkan segalanya.sumber
Solusi:
1.
sudo apt remove python-pip
2.
pip3 install pip
(atau instal pip by get-pip.py )Mengapa:
Kesalahan ini terjadi pada pip 8.0.1 yang diinstal oleh apt-get. Dan hanya terjadi ketika jaringan Anda tidak stabil.
Jika Anda memiliki pip yang diinstal dengan apt, itu menyembunyikan pip yang Anda instal dengan cara lain, jadi Anda harus menghapus apt terlebih dahulu.
Saya memutus jaringan dan menguji 8.0.1, 9.0.3, 10.x 3 versi yang diinstal dengan pip3 atau get-pip.py, tidak ada kesalahan yang terjadi. Jadi, saya pikir hanya versi apt dari pip 8.0.1 yang memiliki bug itu, yang lainnya tidak masalah.
sumber
Dalam kasus saya, saya telah membuka Pycharm dalam mode sudo, dan menjalankan pip install nltk di terminal pycharm yang menunjukkan kesalahan ini. berjalan dengan sudo pip install memecahkan kesalahan.
sumber
Saya juga mengalami masalah ini. Awalnya, proxy disetel dan berfungsi dengan baik. Kemudian saya terhubung ke jaringan yang tidak melalui proxy. Setelah membatalkan proxy pip lagi bekerja.
sumber
Anehnya jika saya menghapus proxy dari lingkungan dan menambahkannya ke baris perintah, itu berfungsi untuk saya. Misalnya untuk meningkatkan
pip
dirinya sendiri:Masalah saya adalah memiliki proxy di lingkungan. Tampaknya pip hanya menghormati yang ada dalam argumen.
sumber
Ini adalah solusi yang berfungsi untuk masalah yang saya temukan ini.
sumber
Bagi saya sendiri, ternyata wlan0 sedang down, yang mengakibatkan saya tidak bisa tersambung. Jadi, memastikan bahwa wlan0 sudah aktif, biarkan pip / pip3 berfungsi tanpa masalah.
sumber
Saya mencoba solusi yang dijawab di atas:
Ketika saya mencoba
Saya mendapat pesan ini
Saya melakukan hal berikut dan berhasil
sumber