Até agora, usei (via Como atualizar todos os pacotes Python com pip )
pip3 list --format freeze --outdated | cut -d= -f1 | xargs pip3 install --upgrade-strategy eager --upgrade
para atualizar todos os meus pacotes Python pip. Até agora funcionou bem para mim - exceto por uma vez, quando recebi uma espécie de mensagem de conflito, infelizmente não guardei uma cópia dela; meu palpite é que foi algo semelhante a este observado aqui https://pip.pypa.io/en/stable/user_guide/#fixing-conflicting-dependencies :
Due to conflicting dependencies pip cannot install
package_coffee and package_tea:
- package_coffee depends on package_water<3.0.0,>=2.4.2
- package_tea depends on package_water==2.3.1
De qualquer forma, agora eu tentei instalar voila
para a minha instalação do Jupyter e acabou assim:
(notebook) user@server:/home/web/Jupyter$ pip3 install voila
...
Installing collected packages: jupyter-client, voila
Attempting uninstall: jupyter-client
Found existing installation: jupyter-client 7.0.3
Uninstalling jupyter-client-7.0.3:
Successfully uninstalled jupyter-client-7.0.3
Successfully installed jupyter-client-6.1.12 voila-0.2.13
Em outras palavras: já jupyter-client-7.0.3
instalei antes, o mais recente; mas agora que eu queria instalar voila
, devido a voila
requisitos, essa versão mais recente foi desinstalada e uma versão anterior 6.1.12
, compatível com voila
, foi instalada em seu lugar.
Portanto, agora, se eu quiser verificar os pacotes desatualizados, recebo, como esperado, uma jupyter-client
lista:
(notebook) user@server:/home/web/Jupyter$ pip3 list --format freeze --outdated
jupyter-client==6.1.12
... mas então, se eu executar o comando full pipe, pip3 list --format freeze --outdated | cut -d= -f1 | xargs pip3 install --upgrade-strategy eager --upgrade
ele vai querer atualizar jupyter-client
para 7.0.3, que vai quebrar voila
(eu acho, não me atrevo a tentar).
Então, há um comando de atualização que tomaria uma situação como esta e, em tal estado durante a atualização, impediria mudanças e me notificaria? Diga, algo como:
AVISO: Há uma atualização para jupyter-client = 6.1.12 (versão mais recente 7.0.3) - no entanto, a instalação desse pacote causaria um conflito com o
voila=0.2.13
pacote instalado atualmente ; não continuar com esta atualização. Para forçar esta atualização de qualquer maneira, use [...]
Atualizar pacotes em python nunca é fácil devido às (sub) dependências sobrepostas. Existem algumas ferramentas que tentam ajudar você a gerenciar. No meu trabalho atual, usamos ferramentas pip . E em alguns projetos usamos poesia, mas fico menos feliz com o manuseio.
Para pip-tools você define seus pacotes de nível superior no requirements.in
arquivo, que então resolve as sub (sub-sub) dependências e as produz em um requirements.txt
arquivo. A vantagem disso é que você só se preocupa com seus pacotes principais. Você ainda pode atualizar subdependências, se desejar.
Longa história curta; atualizar cegamente todos os seus pacotes provavelmente nunca funcionará como pretendido ou esperado. Ou os pacotes SÃO atualizados, mas param de funcionar, ou funcionam, mas não funcionam com outro pacote que foi atualizado porque eles precisavam de uma versão anterior desse pacote.
Meu conselho seria começar com seus pacotes principais e construir a partir daí, usando uma das ferramentas mencionadas. Não há uma bala de prata para isso. O inferno da dependência é uma coisa muito real em python.
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras