Ambiente
Isso também foi reproduzido usando docker run python:3
.
Descrição
pip instala um pacote com dependências quebradas, se um arquivo de restrições especifica uma versão incompatível. Uma mensagem de erro é exibida, mas o código de saída é 0
.
Por exemplo, environs 5.2.1
requer marshmallow>=2.7.0
, mas pip o instala com marshmallow 2.6.0
se o último for especificado em um arquivo de restrições.
Comportamento esperado
pip não deve instalar o pacote e sair com falha.
Como reproduzir
marshmallow==2.6.0
environs==5.2.1
pip install -r requirements.txt -c constraints.txt
Saída
$ 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
Este é essencialmente o mesmo que # 988 (consulte também: # 5137).
Pip descobre os requisitos encontrados pela primeira vez (embora isso esteja sujeito a alterações sem aviso prévio). Quando o arquivo de requisitos e o arquivo de restrições são analisados, terminamos com environs==5.2.1
como um requisito e marshmallow==2.6.0
como uma restrição. Quando environs
está sendo processado, marshmallow
é percebido como uma dependência e a entrada existente ( marshmallow==2.6.0
) é marcada como um requisito, e a versão existente é a usada para a instalação . Acho que usar o valor fornecido pelo usuário (mesmo que apenas como uma restrição) é provavelmente o comportamento mais correto que podemos ter aqui.
O erro rastreado é o mesmo que seria rastreado para pip install environs==5.2.1 marshmallow==2.6.0
simples ou invocações separadas como pip install environs==5.2.1 && pip install marshmallow==2.6.0
.
Isso foi adicionado em # 5000. A razão pela qual o código de saída não é 1 é a compatibilidade com versões anteriores.
Se você quiser saber programaticamente que isso está acontecendo, execute pip check
.
Este problema foi encerrado automaticamente porque não houve resposta ao nosso pedido de mais informações do autor original. Com apenas as informações que estão atualmente no problema, não temos informações suficientes para tomar medidas. Entre em contato se tiver ou encontre as respostas de que precisamos para que possamos investigar mais a fundo.