O conda ou conda-forge deve ser usado para ambientes Python?

127

Condae conda-forgesão ambos gerenciadores de pacotes Python. Qual é a escolha apropriada quando existe um pacote nos dois repositórios? O Django, por exemplo, pode ser instalado com qualquer um dos dois, mas a diferença entre os dois é de várias dependências (o conda-forge tem muito mais). Não há explicação para essas diferenças, nem mesmo um simples README.

Qual deles deve ser usado? Conda ou conda-forja? Isso importa?

tilikoom
fonte
5
"Conda e conda-forge são ambos gerenciadores de pacotes Python." Eu não acho que seja verdade. Eu não acho que eles estejam na mesma categoria de coisas. condaé um gerenciador de pacotes e conda-forgeé um canal. Talvez fosse verdade quando essa pergunta foi feita?
Endolith

Respostas:

200

A resposta curta é que, na minha experiência geral, não importa qual você use.

A resposta longa:

Assim conda-forgeé um canal adicional a partir do qual os pacotes podem ser instalados. Nesse sentido, não é mais especial que o canal padrão ou qualquer outra centenas (milhares?) De canais nos quais as pessoas postaram pacotes. Você pode adicionar seu próprio canal se se inscrever em https://anaconda.org e enviar seus próprios pacotes Conda.

Aqui precisamos fazer a distinção, sobre a qual acho que você não está claro na sua formulação na pergunta entre condao gerenciador de pacotes de plataforma cruzada e conda-forgeo canal de pacotes. A Anaconda Inc. (anteriormente Continuum IO), os principais desenvolvedores do condasoftware, também mantém um canal separado de pacotes, que é o padrão quando você digita conda install packagenamesem alterar nenhuma opção.

Existem três maneiras de alterar as opções de canais. Os dois primeiros são feitos toda vez que você instala um pacote e o último é persistente. O primeiro é especificar um canal toda vez que você instala um pacote:

conda install -c some-channel packagename

Obviamente, o pacote precisa existir nesse canal. Desta forma, instalará packagenamee todas as suas dependências a partir some-channel. Como alternativa, você pode especificar:

conda install some-channel::packagename

O pacote ainda precisa existir some-channel, mas agora, apenas packagenameserá retirado some-channel. Quaisquer outros pacotes necessários para satisfazer dependências serão pesquisados ​​na sua lista padrão de canais.

Para ver a configuração do seu canal, você pode escrever:

conda config --show channels

Você pode controlar a ordem em que os canais são pesquisados conda config. Você pode escrever:

conda config --add channels some-channel

para adicionar o canal some-channelao topo da channelslista de configurações. Isso dá some-channela maior prioridade. A prioridade determina ( em parte ) qual canal será selecionado quando mais de um canal tiver um pacote específico. Para adicionar o canal ao final da lista e dar a menor prioridade, digite

conda config --append channels some-channel

Se você deseja remover o canal que você adicionou, pode fazê-lo escrevendo

conda config --remove channels some-channel

Vejo

conda config -h

para mais opções.

Com tudo isso dito, há quatro razões principais para usar o conda-forgecanal em vez do defaultscanal mantido pela Anaconda:

  1. Os pacotes conda-forge podem estar mais atualizados do que os do defaultscanal
  2. Existem pacotes no conda-forgecanal que não estão disponíveis emdefaults
  3. Você prefere usar uma dependência como openblas(de conda-forge) em vez de mkl(de defaults).
  4. Se você estiver instalando um pacote que requer uma biblioteca compilada (por exemplo, uma extensão C ou um wrapper em torno de uma biblioteca C), poderá reduzir a chance de incompatibilidades se você instalar todos os pacotes em um ambiente a partir de um único canal devido a problemas binários. compatibilidade da biblioteca C básica (mas este conselho pode estar desatualizado / alterado no futuro).
darthbith
fonte
1
Obrigado! Eu tenho duas perguntas relacionadas: 1. como posso descobrir qual canal é bom tentar e; 2. Depois de configurar em um canal, como posso redefinir o padrão?
Daniel
1
@ Kenny Para responder à sua primeira pergunta, você deve procurar o pacote que deseja no anaconda.org e ver quais canais têm o pacote. Editei a resposta para responder à sua segunda pergunta. No entanto, eu também notar que, se você deseja instalar um único pacote de um canal, é provavelmente mais fácil de usar a conda install -c some-channel packagenameforma de escrever o comando
darthbith
isso é ótimo! Existe uma comparação disponível entre o conda-forge e o conda em termos de número de módulos suportados, atualização, cobertura etc.?
Rutger Hofste 06/04
1
Não é mklmais rápido que openblas?
Endolith
3
@endolith Talvez, mas 1) possivelmente apenas em processadores Intel e 2) não é open source
darthbith
4

A Anaconda alterou seus Termos de Serviço para que "usuários comerciais pesados" pagassem, o que não inclui o conda-forgecanal.

Você provavelmente iria querer conda-forgese não quiser pagar pelo uso. Conforme declarado nos documentos :

conda config --add channels conda-forge
conda config --set channel_priority strict
conda install <package-name>

Você também pode usar o miniforge, que tem conda-forgecomo canal padrão, e suporta as plataformas ppc64le e aarch64, bem como as outras usuais.

adrin
fonte
3

O canal conda-forge é onde você pode encontrar pacotes que foram construídos para o conda, mas que ainda fazem parte da distribuição oficial do Anaconda.

Geralmente, você pode usar qualquer um deles.

Ashiq Imran
fonte
1

Existem algumas bibliotecas Python que você não pode instalar com um simples, conda installpois o canal deles não está disponível, a menos que você aplique o conda-forge. Pela minha experiência, o pip é mais genérico para procurar em diferentes fontes de canal que o conda. Por exemplo, se você deseja instalar, python-constraintpode fazê-lo via pip installmas instalá-lo via ** cond **. você tem que especificar o canal - conda-forge.

conda install -c conda-forge python-constraint // works

mas não

conda install python-constraint
ewalel
fonte
Resposta confusa. A instalação do pip leva o pacote para fora do próprio gerenciamento de pacotes e verificação de dependência da conda, o que significa que você precisa gerenciá-lo (e potencialmente suas dependências) manualmente e que comandos como conda update --allnão atualizarão o pacote instalado do pip
Jean Monet