Arquivo de ambiente de exportação Anaconda

129

Como posso criar um arquivo de ambiente anaconda que pode ser usado em outros computadores?

Eu exportei meu ambiente anaconda python para YML usando conda env export > environment.yml. O exportado environment.ymlcontém esta linha prefix: /home/superdev/miniconda3/envs/juicyenvque mapeia para a localização da minha anaconda, que será diferente nos computadores de outras pessoas.

Lau
fonte
7
Eu estava apenas fazendo alguns testes e achei que encontrei o prefixo ignorado ... não sei por que ele está na exportação env. Você deve ser capaz de fazer isso à conda env create -f environment.yml parte, na minha experiência, isso não funcionará entre plataformas, porque o conda env listará muitas dependências, como `vs2015_runtime`, se você estiver no Windows. Mas é claro que isso não está disponível no linux.
Alex G Arroz
4
Conda realmente recomenda criar o environment.ymlarquivo manualmente, para que você possa deixá-lo fora - ver stackoverflow.com/questions/39280638/...
Brian Burns

Respostas:

177

Não consigo encontrar nada nas condaespecificações que permita exportar um arquivo de ambiente sem a prefix: ...linha. No entanto, como Alex apontou nos comentários, o conda não parece se importar com a linha do prefixo ao criar um ambiente a partir do arquivo.

Com isso em mente, se você quiser que o outro usuário não tenha conhecimento do seu caminho de instalação padrão, poderá remover a linha do prefixo grepantes de gravar em environment.yml.

conda env export | grep -v "^prefix: " > environment.yml

De qualquer forma, o outro usuário executa:

conda env create -f environment.yml

e o ambiente será instalado no caminho do ambiente conda padrão.

Se você deseja especificar um caminho de instalação diferente do padrão para o seu sistema (não relacionado ao 'prefixo' no environment.yml), basta usar o -psinalizador seguido pelo caminho necessário.

conda env create -f environment.yml -p /home/user/anaconda3/envs/env_name

Observe que a Conda recomenda criar environment.ymlmanualmente, o que é especialmente importante se você deseja compartilhar seu ambiente entre plataformas (Windows / Linux / Mac). Nesse caso, você pode simplesmente deixar de fora a prefixlinha.

Andrew Guy
fonte
1
... eggcellent! Hi
Ahi Tuna
44

A maneira mais fácil de salvar os pacotes de um ambiente a ser instalado em outro computador é:

$ conda list -e > req.txt

então você pode instalar o ambiente usando

$ conda create -n new environment --file req.txt

se você usar pip, use os seguintes comandos: reference https://pip.pypa.io/en/stable/reference/pip_freeze/

$ env1/bin/pip freeze > requirements.txt
$ env2/bin/pip install -r requirements.txt
javac
fonte
Bom, no entanto, parece não funcionar com pacotes instalados pelo pip.
Little Bobby Tables
1
obrigado Eu apenas atualizado com base na referência dada
javac
Eu usei o Anaconda Navigator e o pip (de dentro do ambiente) para instalar as coisas. O que você recomendaria que eu usasse? Ambos os comandos?
DA
Eu acho que é melhor usar o comando Conda no ambiente Anaconda, você também pode usar pip se for necessário
javac
9
  • Linux

    exportação de conda env - no-builds | grep -v "prefixo"> environment.yml

  • janelas

    exportação de conda env - no-builds | findstr -v "prefixo"> environment.yml


Justificativa: Por padrão, conda env exportinclui as informações de construção:

$ conda env export
...
dependencies:
  - backcall=0.1.0=py37_0
  - blas=1.0=mkl
  - boto=2.49.0=py_0
...

Em vez disso, você pode exportar seu ambiente sem informações de compilação:

$ conda env export --no-builds
...
dependencies:
  - backcall=0.1.0
  - blas=1.0
  - boto=2.49.0
...

O que desata o ambiente da versão e do SO Python.

Ilyas
fonte
1
Concordo que esta é uma boa resposta, mas considere adicionar alguns detalhes sobre por que excluir informações de compilação é útil para transferir envs entre plataformas.
merv
Acabou usando isso, mas ótima idéia @merv. Fiz exatamente isso.
François Leblanc
Infelizmente, isso nem sempre funciona ao instalar a exportação e reinstalar em diferentes sistemas operacionais.
Sören
2

Acho que exportar os pacotes apenas no formato string é mais portátil do que exportar todo o condaambiente. Como a resposta anterior já sugeriu:

$ conda list -e > requirements.txt

No entanto, isso requirements.txtcontém números de compilação que não são portáveis ​​entre sistemas operacionais, por exemplo, entre Mace Ubuntu. Em conda env exporttemos a opção, --no-buildsmas não com conda list -e, para que possamos remover o número da compilação emitindo o seguinte comando:

$ sed -i -E "s/^(.*\=.*)(\=.*)/\1/" requirements.txt 

E recrie o ambiente em outro computador:

conda create -n recreated_env --file requirements.txt 
Nicole Finnie
fonte
sedcomando funcionou muito bem. Eu tive que excluir uma versão do patch. Então, major.minor.patchpara major.minore funcionou. Acontece que o número de patch mais baixo foi descartado pelos principais repositórios.
Lucas
1
  1. Primeiro ative seu ambiente conda (aquele que você deseja exportar / fazer backup)
conda activate myEnv
  1. Exportar todos os pacotes para um arquivo (myEnvBkp.txt)
conda list --explicit > myEnvBkp.txt
  1. Restaurar / importar o ambiente:
conda create --name myEnvRestored --file myEnvBkp.txt
Savrige
fonte