<p>互換性のない制約にもかかわらず、pipは成功して終了します</p>

作成日 2019年09月03日  ·  3コメント  ·  ソース: pypa/pip

環境

  • pipバージョン:19.2.3
  • Pythonバージョン:3.7.4
  • OS:macOS 18.7.0

これもdocker run python:3を使用して再現されました。

説明

制約ファイルで互換性のないバージョンが指定されている場合、pipは依存関係が壊れたパッケージをインストールします。 エラーメッセージが表示されますが、終了コードは0です。

たとえば、 environs 5.2.1marshmallow>=2.7.0 environs 5.2.1が必要ですが、後者が制約ファイルで指定されている場合、pipはmarshmallow 2.6.0インストールします。

予想される行動

pipはパッケージをインストールせず、失敗して終了する必要があります。

再現する方法

  1. marshmallow==2.6.0 constraints.txtを作成します
  2. environs==5.2.1 requirements.txtを作成します
  3. pip install -r requirements.txt -c constraints.txt実行します

出力

$ docker run --rm -ti python:3 sh
# python -V
Python 3.7.4
# pip -V
pip 19.2.3 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)
# uname -a
Linux 4d4f16cc965f 4.9.184-linuxkit #1 SMP Tue Jul 2 22:58:16 UTC 2019 x86_64 GNU/Linux
# echo marshmallow==2.6.0 > constraints.txt
# echo environs==5.2.1 > requirements.txt
# pip install -r requirements.txt -c constraints.txt
Collecting environs==5.2.1 (from -r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/5f/c9/6b576b8b374dfe78d9435988e6a53497822f31b9da5bdd446343ad1a4d1b/environs-5.2.1-py2.py3-none-any.whl
Collecting marshmallow==2.6.0 (from -c constraints.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/33/44/c3bdd4222909b6452ebe5c028ea5dbe7e9409307b3b933026218c677fcf1/marshmallow-2.6.0-py2.py3-none-any.whl (44kB)
     |████████████████████████████████| 51kB 729kB/s
Collecting python-dotenv (from environs==5.2.1->-r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/57/c8/5b14d5cffe7bb06bedf9d66c4562bf90330d3d35e7f0266928c370d9dd6d/python_dotenv-0.10.3-py2.py3-none-any.whl
ERROR: environs 5.2.1 has requirement marshmallow>=2.7.0, but you'll have marshmallow 2.6.0 which is incompatible.
Installing collected packages: marshmallow, python-dotenv, environs
Successfully installed environs-5.2.1 marshmallow-2.6.0 python-dotenv-0.10.3
# echo $?
0
duplicate auto-locked awaiting response support

全てのコメント3件

これは基本的に#988と同じです(#5137も参照)。

Pipは、最初に遭遇した要件を把握します(ただし、これは予告なしに変更される場合があります)。 要件ファイルと制約ファイルを解析すると、要件としてenvirons==5.2.1 、制約としてmarshmallow==2.6.0になります。 environsが処理されているとき、 marshmallowが依存関係として認識され、既存のエントリ( marshmallow==2.6.0 )が要件としてマークされ、既存のバージョンがインストールに使用されます。 。 ユーザーが指定した値を使用することは(制約としてだけでも)、おそらくここで実行できる最も正しい動作だと思います。

トレースされるエラーは、プレーンなpip install environs==5.2.1 marshmallow==2.6.0またはpip install environs==5.2.1 && pip install marshmallow==2.6.0ような個別の呼び出しでトレースされるエラーと同じです。

これは#5000で追加されました。 終了コードが1でない理由は、下位互換性です。

これが発生していることをプログラムで知りたい場合は、 pip checkを実行します。

この問題は、元の作成者からの詳細情報の要求に対する応答がなかったため、自動的にクローズされました。 現在問題になっている情報だけでは、行動を起こすのに十分な情報がありません。 さらに調査できるように、必要な回答がある場合はご連絡ください。

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