Environnement
Cela a également été reproduit en utilisant docker run python:3
.
La description
pip installe un package avec des dépendances rompues, si un fichier de contraintes spécifie une version incompatible. Un message d'erreur s'affiche, mais le code de sortie est 0
.
Par exemple, environs 5.2.1
requiert marshmallow>=2.7.0
, mais pip l'installe avec marshmallow 2.6.0
si ce dernier est spécifié dans un fichier de contraintes.
Comportement prévisible
pip ne doit pas installer le paquet et se terminer avec un échec.
Comment reproduire
marshmallow==2.6.0
environs==5.2.1
pip install -r requirements.txt -c constraints.txt
Sortir
$ 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
C'est essentiellement le même que #988 (voir aussi : #5137).
Pip détermine les exigences sur la base de la première rencontre (bien que cela puisse être modifié sans préavis). Lorsque le fichier d'exigences et le fichier de contraintes sont analysés, nous nous retrouvons avec environs==5.2.1
comme exigence et marshmallow==2.6.0
comme contrainte. Lorsque environs
est en cours de traitement, marshmallow
est remarqué comme une dépendance et l'entrée existante ( marshmallow==2.6.0
) est marquée comme une exigence, et la version existante est celle utilisée pour l'installation . Je pense que l'utilisation de la valeur fournie par l'utilisateur (même si ce n'est qu'une contrainte) est probablement le comportement le plus correct que nous puissions avoir ici.
L'erreur qui est tracée est la même qui serait tracée pour un simple pip install environs==5.2.1 marshmallow==2.6.0
ou des invocations séparées comme pip install environs==5.2.1 && pip install marshmallow==2.6.0
.
Cela a été ajouté dans #5000. La raison pour laquelle le code de sortie n'est pas 1, est la rétrocompatibilité.
Si vous voulez savoir par programme que cela se produit, vous voulez exécuter pip check
.
Ce problème a été automatiquement fermé car il n'y a pas eu de réponse à notre demande d'informations supplémentaires de la part de l'auteur d'origine. Avec seulement les informations qui sont actuellement dans le problème, nous n'avons pas assez d'informations pour prendre des mesures. Veuillez nous contacter si vous avez ou trouvez les réponses dont nous avons besoin afin que nous puissions approfondir nos recherches.