序文:私は2020年1月1日の締め切り全体に精通しており、すべてのプロジェクトでPython 2を削除する過程にありますが、setuptoolsからのこの驚きは、それにもかかわらず非常に不便です。 これを修正しないことを選択した場合、私は誰も判断しませんが、Python2が非推奨になることについて私に講義しないでください:-)
Python 2での自動化された仮想環境作成スクリプトはすべて、今日壊れ始めました。
次に例を示します。
$ 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
これは、昨日のsetuptools
v45.0.0のリリースが原因のようです。
v45.0.0:2020年1月11日
1458:Python2のサポートを終了しました。SetuptoolsにPython3.5以降が必要になりました。 2.7のサポートを維持するには、pip> = 9を使用してsetuptoolsをインストールするか、Setuptools <45にピン留めします。
1959:Python 4の修正:安全でないsix.PY3をsix.PY2に置き換えますhttps://setuptools.readthedocs.io/en/latest/history.html#v45 -0-0
デフォルトでは、 virtualenv
は最新のsetuptoolsをインストールしようとし、これらのバージョンはPython 2をサポートしていなくても、 pip install setuptools
はsetuptools>=45.0.0
を取得するようです。
回避策として、現在次のコマンドを使用しています。
$ py -2.7-32 -m virtualenv --no-setuptools foo
$ foo\Scripts\python -m pip install "setuptools<45"
私はPythonパッケージでエクスポートしていませんが、 setuptools>=45
が配布メタデータでPython 2をサポートしていないことを宣言し、 pip install setuptools
が自動的にそれを検出して回避することを期待していますが、これはそうではないようです。
それが不可能な場合は、おそらくのバージョンvirtualenv
Pythonの2のためには避けなければならないsetuptools>=45
?
これが大きな問題であることを確認しました。 OpenStackでは、これが原因でほとんどのゲートがATMで壊れています。 参照: http :
報告してくれてありがとう、/ meは30分遅れました-virtualenvはpipの最新のリゾルバーを使用すると思いましたが、使用していないようです。
別のダウンストリームhttps://github.com/pypa/setuptools/issues/1963のsetuptoolsですでに追跡されてい
setuptools 45+が選択される理由がわからない場合、virtualenvsブートストラップはsetuptools用に44を保持する必要があります。 🤔
トレースバックは次のとおりです: http :
legend_resolveは、新しいルールを破棄するようなもののように聞こえます。
いや、探索する方法が間違っています。生のpipはpyバージョンの制約も無視します(動作していると宣伝されているにもかかわらず): http :
明日、修正を確認してリリースします。 誰かがそれの前にprを作る時間があればそれは助けになるでしょう。
@yoctozeptoはあなたの失敗を再現できないようです。 三重の冗長性を備えた完全な作成ログを提供できますか?
@gaborbernat pypa / pip#7586と同じ問題である場合、これは@yoctozeptoが使用しているPyPAミラーの1つのバグである可能性があります。
どうやらそれらの1つはpython_requires
情報を正しく伝播していません。
もしそうなら、これはそのミラーのバグです。 自分とは何の関係もありません🤷♂
この問題から抜け出すために、次のことがうまくいきました。
pip install --upgrade'setuptools <45.0.0 '
私はまだpython2.7 :(を使用しているプロジェクトで作業していますが、同じ問題が発生しました。
しかし、上記のコマンド(ikrambabaiによる)を使用すると、再び機能しました!! :NS
ありがとう!
ただし、 virtualenv
はsetuptools-45.0.0
をダウンロードし、アップグレード( pip install --upgrade 'setuptools<45.0.0'
を使用したpipによるダウングレード)では実際に削除されないため、Python2.7の新しい仮想環境を作成する場合は依然として重要です。 。 唯一の解決策は、ホイールを手動でダウンロードすることです。
ただし、
virtualenv
はsetuptools-45.0.0
をダウンロードし、アップグレード(pip install --upgrade 'setuptools<45.0.0'
を使用したpipによるダウングレード)では実際に削除されないため、Python2.7の新しい仮想環境を作成する場合は依然として重要です。 。 唯一の解決策は、ホイールを手動でダウンロードすることです。
これは、python-requiresを伝播しないインデックスサーバーの背後にいる場合にのみ発生するはずです...したがって、インデックスサーバーを修正することをお勧めします。
@gaborbernat私が知っていることではありません。 確認する方法はありますか?
virtualenvの作成時にパッケージをダウンロードするときにpythonhosted.orgが使用されていることがわかります。
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
pip install setuptools -vvv
の-vフラグを渡しますか?
それは機能し、正しいバージョンがインストールされます:
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
この問題は、仮想環境を作成するときにのみ発生します。
@ostefanoそれは私にとっても同じでした。 setuptools
明示的にインストールすることで、これを回避しました。
$ py -2.7-32 -m virtualenv --no-setuptools foo
$ foo\Scripts\python -m pip install "setuptools<45"
同じ問題に直面しました: https :
最初は、pythonhosted.orgがRequires-Python
フラグを尊重していないと思いましたが、同じミラーを使用すると、Python2.7.13を使用するDebianStretchで動作しますが、Python2.7.12を使用するUbuntuXenialでは失敗します。 Docker環境でもテストされています。 同じ問題がUbuntuBionicとPython2.7.17ですでに報告されているため、Pythonバージョンが理由になることはありません。
だから私はどこで/どのレベルでバグを検索する必要があるのか、Python、virtualenv、pip、pythonhosted.orgに戸惑っていますか、それとも途中に何かありますか?
回避策は明らかですが、setuptools45が最初にプルされた理由を調査して修正することは素晴らしいことです。
最も参考になるコメント
この問題から抜け出すために、次のことがうまくいきました。
pip install --upgrade'setuptools <45.0.0 '