Kata Pengantar : Saya cukup akrab dengan seluruh tenggat waktu 1 Januari 2020 dan saya sedang dalam proses menjatuhkan Python 2 di semua proyek saya, tetapi kejutan dari setuptools ini cukup merepotkan. Jika Anda memilih untuk tidak memperbaikinya, saya tidak akan menghakimi siapa pun, tetapi tolong jangan menceramahi saya tentang Python 2 yang sudah usang :-)
Semua skrip pembuatan lingkungan virtual otomatis saya di Python 2 mulai rusak hari ini.
Berikut ini contohnya:
$ py -2.7-32 -m virtualenv foo
…
UnsupportedPythonVersion: Package 'setuptools' requires a different Python: 2.7.8 not in '>=3.5'
…
OSError: Command …\Scripts\python.exe - setuptools pip wheel failed with error code 1
Ini tampaknya disebabkan oleh rilis setuptools
v45.0.0 kemarin:
v45.0.0: 11 Jan 2020
1458: Putuskan dukungan untuk Python 2. Setuptools sekarang membutuhkan Python 3.5 atau yang lebih baru. Instal setuptools menggunakan pip >=9 atau pin ke Setuptools <45 untuk mempertahankan dukungan 2.7.
1959: Perbaiki untuk Python 4: ganti six.PY3 yang tidak aman dengan six.PY2https://setuptools.readthedocs.io/en/latest/history.html#v45 -0-0
Tampaknya, secara default, virtualenv
mencoba menginstal setuptools terbaru dan pip install setuptools
mengambil setuptools>=45.0.0
meskipun versi ini tidak mendukung Python 2.
Sebagai solusinya, saya sekarang menggunakan perintah berikut:
$ py -2.7-32 -m virtualenv --no-setuptools foo
$ foo\Scripts\python -m pip install "setuptools<45"
Saya tidak mengekspor dalam kemasan Python, tetapi saya berharap setuptools>=45
untuk menyatakan itu tidak mendukung Python 2 dalam metadata distribusinya dan bahwa pip install setuptools
akan secara otomatis mendeteksi itu dan menghindarinya, tetapi ini tampaknya tidak demikian.
Jika itu tidak memungkinkan, mungkin versi virtualenv
untuk Python 2 harus dihindari setuptools>=45
?
Saya mengkonfirmasi ini adalah masalah besar. Di OpenStack sebagian besar gerbang rusak karena hal ini. Lihat: http://lists.openstack.org/pipermail/openstack-discuss/2020-January/011956.html
Terima kasih telah melaporkan, / saya terlambat setengah jam - Saya pikir virtualenv akan menggunakan resolver modern pip tetapi tampaknya tidak.
Sudah dilacak di setuptools untuk hilir lainnya https://github.com/pypa/setuptools/issues/1963
Tidak yakin mengapa setuptools 45+ diambil, virtualenvs bootstrap harus menyimpannya 44 untuk setuptools. 🤔
Ini tracebacknya: http://paste.openstack.org/show/788301/
legacy_resolve terdengar seperti sesuatu yang akan membuang aturan baru.
Nah, jalan yang salah untuk dijelajahi, pip mentah juga mengabaikan batasan versi py (meskipun diiklankan berfungsi): http://paste.openstack.org/show/788302/
Saya akan melihat dan merilis perbaikan besok. Jika ada yang punya waktu untuk membuat pr sebelum itu akan membantu.
@yoctozepto sepertinya tidak bisa meniru kegagalan Anda; dapatkah Anda memberi kami log pembuatan lengkap dengan verbositas rangkap tiga?
@gaborbernat Jika masalahnya sama dengan pypa/pip#7586, maka ini mungkin bug di salah satu mirror PyPA yang digunakan .
Rupanya salah satunya tidak menyebarkan informasi python_requires
dengan benar.
Jika demikian, maka ini adalah bug untuk cermin itu; tidak ada hubungannya dengan diri kita sendiri
Berikut ini berhasil bagi saya untuk keluar dari masalah ini.
pip install --upgrade 'setuptools<45.0.0'
Saya bekerja dengan proyek yang masih menggunakan python 2.7 :(, dan saya memiliki masalah yang sama.
Tapi, dengan menggunakan perintah di atas (oleh ikrambabai), berhasil lagi!! :D
Terima kasih!
Namun ini masih penting ketika membuat lingkungan virtual baru untuk python 2.7, karena virtualenv
akan mengunduh setuptools-45.0.0
, dan tidak ada peningkatan (turunkan versi melalui pip dengan pip install --upgrade 'setuptools<45.0.0'
) yang akan benar-benar menghapusnya . Satu-satunya solusi adalah mengunduh roda secara manual.
Namun ini masih penting ketika membuat lingkungan virtual baru untuk python 2.7, karena
virtualenv
akan mengunduhsetuptools-45.0.0
, dan tidak ada peningkatan (turunkan versi melalui pip denganpip install --upgrade 'setuptools<45.0.0'
) yang akan benar-benar menghapusnya . Satu-satunya solusi adalah mengunduh roda secara manual.
Ini seharusnya hanya terjadi jika Anda berada di belakang server indeks yang tidak mempropagandakan python-requires... jadi saya sarankan untuk memperbaiki server indeks.
@gaborbernat bukan yang saya sadari. Apakah ada cara bagi saya untuk memeriksanya?
Saya dapat melihat bahwa pythonhosted.org digunakan saat mengunduh paket saat membuat virtualenv:
Installing setuptools, pkg_resources, pip, wheel...
Running command /opt/llenv22/bin/python2.7 - setuptools pkg_resources pip wheel
Collecting setuptools
Using cached https://files.pythonhosted.org/packages/af/e7/02db816dc88c598281bacebbb7ccf2c9f1a6164942e88f1a0fded8643659/setuptools-45.0.0-py2.py3-none-any.whl
Collecting pkg_resources
Collecting pip
Using cached https://files.pythonhosted.org/packages/54/0c/d01aa759fdc501a58f431eb594a17495f15b88da142ce14b5845662c13f3/pip-20.0.2-py2.py3-none-any.whl
Collecting wheel
Using cached https://files.pythonhosted.org/packages/00/83/b4a77d044e78ad1a45610eb88f745be2fd2c6d658f9798a15e384b7d57c9/wheel-0.33.6-py2.py3-none-any.whl
Berikan flag -v untuk pip install setuptools -vvv
?
Itu berfungsi dan versi yang benar diinstal:
Collecting setuptools
Created temporary directory: /tmp/pip-unpack-zJMfUH
Starting new HTTPS connection (1): files.pythonhosted.org:443
https://files.pythonhosted.org:443 "GET /packages/f9/d3/955738b20d3832dfa3cd3d9b07e29a8162edb480bf988332f5e6e48ca444/setuptools-44.0.0-py2.py3-none-any.whl HTTP/1.1" 200 583230
Downloading setuptools-44.0.0-py2.py3-none-any.whl (583 kB)
|████████████████████████████████| 583 kB 3.3 MB/s
Added setuptools from https://files.pythonhosted.org/packages/f9/d3/955738b20d3832dfa3cd3d9b07e29a8162edb480bf988332f5e6e48ca444/setuptools-44.0.0-py2.py3-none-any.whl#sha256=180081a244d0888b0065e18206950d603f6550721bd6f8c0a10221ed467dd78e to build tracker '/tmp/pip-req-tracker-OTDORt'
Removed setuptools from https://files.pythonhosted.org/packages/f9/d3/955738b20d3832dfa3cd3d9b07e29a8162edb480bf988332f5e6e48ca444/setuptools-44.0.0-py2.py3-none-any.whl#sha256=180081a244d0888b0065e18206950d603f6550721bd6f8c0a10221ed467dd78e from build tracker '/tmp/pip-req-tracker-OTDORt'
Installing collected packages: setuptools
Created temporary directory: /tmp/pip-unpacked-wheel-vDEYe
Masalah muncul hanya saat membuat lingkungan virtual.
@ostefano Itu sama untuk saya. Saya mengatasi ini dengan menginstal setuptools
secara eksplisit:
$ py -2.7-32 -m virtualenv --no-setuptools foo
$ foo\Scripts\python -m pip install "setuptools<45"
Kami menghadapi masalah yang sama: https://github.com/mozilla-services/syncserver/issues/239
Pertama saya pikir itu pythonhosted.org tidak menghormati bendera Requires-Python
tetapi dengan cermin yang sama ia bekerja di Debian Stretch dengan Python 2.7.13 sementara gagal di Ubuntu Xenial dengan Python 2.7.12, jika tidak, pengaturan sistem cukup bersih, bahkan diuji di lingkungan Docker. Versi Python tidak dapat menjadi alasan karena masalah yang sama telah dilaporkan dengan Ubuntu Bionic dan Python 2.7.17.
Jadi saya bingung tawaran di mana/pada level mana bug perlu dicari, Python, virtualenv, pip, pythonhosted.org atau ada sesuatu di tengah?
Solusinya jelas tetapi akan sangat bagus untuk menyelidiki dan memperbaiki alasan mengapa setuptools 45 ditarik sejak awal.
Komentar yang paling membantu
Berikut ini berhasil bagi saya untuk keluar dari masalah ini.
pip install --upgrade 'setuptools<45.0.0'