Virtualenv: Setuptools v45.0.0は、Python2でvirtualenvを壊します

作成日 2020年01月12日  ·  18コメント  ·  ソース: pypa/virtualenv

序文:私は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 setuptoolssetuptools>=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

最も参考になるコメント

この問題から抜け出すために、次のことがうまくいきました。

pip install --upgrade'setuptools <45.0.0 '

全てのコメント18件

これが大きな問題であることを確認しました。 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
ありがとう!

ただし、 virtualenvsetuptools-45.0.0をダウンロードし、アップグレード( pip install --upgrade 'setuptools<45.0.0'を使用したpipによるダウングレード)では実際に削除されないため、Python2.7の新しい仮想環境を作成する場合は依然として重要です。 。 唯一の解決策は、ホイールを手動でダウンロードすることです。

ただし、 virtualenvsetuptools-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が最初にプルされた理由を調査して修正することは素晴らしいことです。

このページは役に立ちましたか?
0 / 5 - 0 評価