Eu tentei o conda search --outdated
, existem muitos pacotes desatualizados, por exemplo, o scipy é 0.17.1, mas o mais recente é 0.18.0. No entanto, quando eu faço o conda update --all
. Não atualizará nenhum pacote.
atualização 1
conda update --all --alt-hint
Fetching package metadata .......
Solving package specifications: ..........
# All requested packages already installed.
# packages in environment at /home/user/opt/anaconda2:
#
atualização 2
Eu posso atualizar esses pacotes separadamente. Eu posso fazer conda update scipy
. Mas por que não consigo atualizar todos eles de uma só vez?
conda update --all --alt-hint
e ver se ele dá qualquer saída ... Ou apenas tentarconda update scipy
e ver o que acontece (talvez com a--alt-hint
bandeira)But why I cannot update all of them in one go?
Provavelmente porque você possui pelo menos um pacote que depende de uma versão mais antiga e, portanto, nada pode ser atualizado.conda update conda
antesconda update --all
Respostas:
TL; DR: conflitos de dependência: a atualização de um requer (por seus requisitos) o downgrade de outro
Você está certo:
é realmente o caminho a percorrer 1 . A Conda sempre tenta atualizar os pacotes para a versão mais recente da série (por exemplo, Python 2.x ou 3.x).
Conflitos de dependência
Mas é possível que haja conflitos de dependência (que impedem uma atualização adicional). A Conda geralmente alerta muito explicitamente se elas ocorrerem.
por exemplo, X requer Y <5,0, portanto, Y nunca será> = 5,0
É por isso que você 'não pode' atualizar todos eles.
Resolver
Para adicionar: talvez ele funcione, mas uma versão mais recente do X trabalhando com Y> 5.0 não está disponível no conda. É possível instalar com o pip, pois mais pacotes estão disponíveis no pip. Mas esteja ciente de que o pip também instala pacotes se existirem conflitos de dependência e que geralmente interrompe seu ambiente conda no sentido de que você não pode mais instalar com confiança o conda. Se você fizer isso, faça-o como último recurso e após todos os pacotes terem sido instalados com o conda. É um truque.
Uma maneira segura que você pode tentar é adicionar o conda-forge como um canal ao atualizar (adicionar
-c conda-forge
como um sinalizador) ou qualquer outro canal encontrado que contenha seu pacote, se você realmente precisar desta nova versão . Dessa forma, o conda também pesquisa nesses locais por pacotes disponíveis.Considerando sua atualização : você pode atualizá-los separadamente, mas isso inclui não apenas uma atualização, mas também um downgrade de outro pacote. Diga, para adicionar ao exemplo acima:
X> 2.0 requer Y <5.0, X <2.0 requer Y> 5.0
Portanto, atualizar Y> 5.0 implica fazer o downgrade de X para <2.0 e vice-versa.
( este é um exemplo pedagógico, é claro, mas é o mesmo na realidade, geralmente apenas com dependências e subdependências mais complicadas )
Portanto, você ainda não pode atualizá- los todos , fazendo as atualizações separadamente; as dependências não são satisfatórias; portanto, mais cedo ou mais tarde, uma atualização fará o downgrade de um pacote já atualizado novamente. Ou quebre a compatibilidade dos pacotes (que você geralmente não quer!), O que só é possível invocando explicitamente um comando ignore-dependencies e force- command. Mas isso é apenas para cortar o seu caminho em torno de questões, definitivamente não é o caso do usuário normal!
1 Se você realmente deseja atualizar os pacotes da sua instalação, o que geralmente não é . O comando executado no ambiente base atualizará os pacotes, mas geralmente você deve trabalhar com ambientes virtuais (
conda create -n myenv
e depoisconda activate myenv
). Executarconda update --all
em um ambiente como esse atualizará os pacotes dentro desse ambiente. No entanto, como o ambiente base também é um ambiente, a resposta se aplica a ambos os casos da mesma maneira.fonte
Para responder com mais precisão à pergunta:
O conda (que é conda para o miniconda e para o Anaconda) atualiza tudo, exceto APENAS, dentro de uma versão específica de um pacote -> maior e menor. Esse é o paradigma.
Na documentação, você encontrará "OBSERVAÇÃO: O Conda é atualizado para a versão mais alta de sua série, portanto, o Python 2.7 atualiza para o mais alto disponível na série 2.x e 3.6 para o mais alto disponível na série 3.x". doc
Se Wang não der um exemplo reproduzível, só podemos ajudar. Por exemplo, é realmente o ambiente virtual que ele deseja atualizar ou Wang pode obter o que deseja?
* POR FAVOR, leia os documentos antes de executar "update --all"! Isso não leva a uma atualização de todos os pacotes por natureza. Como o conda tenta resolver o relacionamento de dependências entre todos os pacotes em seu ambiente, isso pode levar a pacotes DOWNGRADED sem avisos.
Se você quiser atualizar quase tudo, poderá criar um arquivo pin
antes de executar a atualização.
Se mais tarde você desejar ignorar o arquivo em seu ambiente para uma atualização, poderá:
Você não deve atualizar --all. Se você precisar, no entanto, é mais seguro testá-lo em um ambiente clonado.
O primeiro passo deve ser sempre fazer backup da sua especificação atual:
(mas, mesmo assim, nem sempre há um link para a fonte disponível, como para extensões jupyterlab)
Em seguida, você pode clonar e atualizar:
configuração conda
atualizar:
Como a idéia de conda é boa, mas não está funcionando muito bem em ambientes complexos, eu pessoalmente prefiro a combinação de
nix-shell (or lorri) and poetry
[como superior pip / conda .-)] ( introdução poetry2nix ).Finalmente, se você realmente precisa trabalhar com pacotes que não são compatíveis devido a suas dependências, é possível com tecnologias como NixOS / nix-pkgs .
fonte
conda update -n ENVIRONMENT --all
: Concordo que é isso que ele / ela geralmente deseja usar, não para atualizar o ambiente base. No entanto, não encontro uma explicação na sua resposta sobre isso, está apenas escrito e não se refere à diferença de usar o comando do op no ambiente base.Imagine o gráfico de dependência de pacotes, quando o número de pacotes aumenta, a chance de encontrar um conflito ao atualizar / adicionar pacotes é muito maior. Para evitar isso, basta criar um novo ambiente no Anaconda.
Seja econômico, instale apenas o que você precisa. Para mim, instalei os seguintes pacotes no meu novo ambiente:
E eu tenho 84 pacotes no total.
fonte
se estiver trabalhando no MS windows, você pode usar o navegador Anaconda. clique no ambiente, na caixa suspensa, é "instalado" por padrão. Você pode selecionar "atualizável" e começar a partir daí
fonte
Para atualizar todos os pacotes possíveis que usei
conda update --update-all
Funciona!
fonte
Resolvi esse problema com
conda
epip
.Em primeiro lugar, eu corro:
conda uninstall qt and conda uninstall matplotlib and conda uninstall PyQt5
Depois disso, abri o cmd e executei este código que
pip uninstall qt , pip uninstall matplotlib , pip uninstall PyQt5
Por fim, você deve instalar
matplotlib
no pip por este código quepip install matplotlib
fonte