Virtualenv: Setuptools v45.0.0 memecah virtualenv di Python 2

Dibuat pada 12 Jan 2020  ·  18Komentar  ·  Sumber: pypa/virtualenv

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.PY2

https://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 ?

Komentar yang paling membantu

Berikut ini berhasil bagi saya untuk keluar dari masalah ini.

pip install --upgrade 'setuptools<45.0.0'

Semua 18 komentar

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 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.

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.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat