Olá,
Tenho um projeto privado que depende de tecido. Especificamente, fixamos fabric==1.10.2
.
Hoje, as compilações deste projeto começaram a falhar misteriosamente com o seguinte rastreamento de pilha:
19:22:54.233 from fabric import api as fabric_api
19:22:54.233 File "/home/go/work/pipelines/make-ci-00/code/.venv/local/lib/python2.7/site-packages/fabric/api.py", line 11, in <module>
19:22:54.233 from fabric.decorators import (hosts, roles, runs_once, with_settings, task,
19:22:54.233 File "/home/go/work/pipelines/make-ci-00/code/.venv/local/lib/python2.7/site-packages/fabric/decorators.py", line 9, in <module>
19:22:54.233 from Crypto import Random
19:22:54.233 ImportError: No module named Crypto
O tecido está preso à mesma versão há semanas. A instalação manual de pycrypto
ao lado do tecido resolve esse problema.
Apesar de importar explicitamente Crypto.Random
, a única dependência do fabric é não é referenciado em nenhum lugar além dos documentos paramiko.
IMO se você estiver importando símbolos pycrypto
explicitamente dentro do fabric, pycrypto
deve ser citado como uma dependência dentro de setup.py
.
Obrigado!
Paramiko 2.0 foi lançado recentemente (e acho que depende de cryptography
vez de pycrypto
). A versão 1.10.2 do setup.py não restringe adequadamente a versão do paramiko, mas a versão 1.10.3 sim. Talvez a atualização para 1.10.3 ajude.
Parece que isso foi alterado em c7d3034b5f217f2b4e7989f2c8e9bbea335be270
Posso confirmar que o salto para 1.11.1
corrigiu o problema. Me pergunto por que 1.10.2
decidiu quebrar hoje ...
@jamesob isso foi acionado pela reinstalação do Fabric em um novo ambiente? Como @gtback observou, o paramiko mudou recentemente e lançamos versões anteriores do Fab que prendem o paramiko <2 para evitar esse tipo de coisa. Você não estava em um desses, e é provavelmente por isso que as coisas quebraram.
Dito isso, eu não sabia que estávamos importando Crypto diretamente para qualquer lugar; apenas olhei e sim, tivemos que fazer alguns ajustes idiotas para lidar com uma peculiaridade de paralelização do PyCrypto +. Isso terá que mudar se alguma vez desfizermos o pin da versão Paramiko (o que eu provavelmente gostaria de fazer em algum momento, uma vez que tivermos certeza de que o paramiko 2 está estável). Então, obrigado por trazer isso à tona :)
Comentários muito úteis
Paramiko 2.0 foi lançado recentemente (e acho que depende de
cryptography
vez depycrypto
). A versão 1.10.2 do setup.py não restringe adequadamente a versão do paramiko, mas a versão 1.10.3 sim. Talvez a atualização para 1.10.3 ajude.Parece que isso foi alterado em c7d3034b5f217f2b4e7989f2c8e9bbea335be270