Como clonar o ambiente de trabalho Python em outra máquina?

26

Desenvolvi um modelo de aprendizado de máquina com Python (Anaconda + Flask) na minha estação de trabalho e tudo corre bem. Mais tarde, tentei enviar esse programa para outra máquina, onde, é claro, tentei configurar o mesmo ambiente, mas o programa não foi executado. Copiei o programa para outras máquinas onde ele também roda sem problemas.

Não consigo descobrir qual é o problema no caso de falha (o código do programa e a mensagem de erro são abundantes, por isso não posso apresentá-los aqui), mas estou quase certo de que é algo com as diferentes versões das dependências .

Portanto, minha pergunta é que, dado um ambiente em que um determinado programa roda bem, como posso cloná-lo para outro onde também deve rodar bem? Claro, sem a clonagem de todo o sistema;)

Hendrik
fonte
Use exportação conda env.
Kbrose # 26/17

Respostas:

39

Antes de tudo, essa é uma pergunta do Python / Anaconda e provavelmente deve ser feita em um subsite de troca de pilhas diferente.


Quanto à própria pergunta - você pode exportar seu ambiente Anaconda usando:

conda env export > environment.yml

E recrie-o usando:

conda env create -f environment.yml

Observe que, como outros sugeriram - você deve usar ambientes virtuais que permitem criar um determinado ambiente que é separado do de sua máquina e gerenciá-lo mais facilmente.

Para criar um ambiente virtual no Anaconda, você pode usar:

conda create -n yourenvname python=x.x anaconda

que você ativa usando:

source activate yourenvname
enjoar
fonte
A documentação do Anaconda não é muito clara quanto ao uso conda createou conda env createao compartilhar / recriar um ambiente. Poderia, por favor, detalhar mais por que você recomenda o uso conda env createnessa situação?
precisa
Você pode encontrar algumas notas sobre a diferença entre conda createe conda env createaqui: groups.google.com/a/continuum.io/forum/#!topic/conda/… Dito isso, acho que você geralmente pode usá-las de forma intercambiável.
ginge
11
Eu já vi esse segmento, mas precisamente estou tentando entender exatamente em qual situação cada opção ( conda createvs conda env create) deve ser preferida e quais são as desvantagens de cada uma (por exemplo: "[ conda env createé para] ambientes nos quais pacotes usando pip foram instalados em , o que causa complexidade adicional ": que tipo de complexidade adicional ele adiciona?).
precisa
Quero perguntar que, ao executar conda env create -f environment.yml, isso causará erro porque o nome do virtenv no arquivo yml já foi usado. Mude o nome para sua nova virtude a ser superada.
Giang Nguyễn
Desta forma, salva sua vida! se você criar um ambiente a partir de um arquivo com base nas instruções da página Anaconda Managing Environment, não funcionará se você usar outra plataforma. conda list --explicit > FILE_NAMEexporta binários para a plataforma atual e aparentemente não funciona em outra.
Shayan Amani 12/07
5

Procure em 'containers', por exemplo, Docker ( https://www.docker.com/what-container ), uma alternativa mais leve à virtualização.

Isso exigirá algum investimento de tempo, mas no final trará muitos benefícios.

No link, onde marquei sua necessidade específica em negrito e itálico :

Empacote o software em unidades padronizadas para desenvolvimento, remessa e implantação

Uma imagem de contêiner é um pacote executável leve e independente de um software que inclui tudo o necessário para executá-lo: código, tempo de execução, ferramentas do sistema, bibliotecas do sistema, configurações. Disponível para aplicativos baseados em Linux e Windows, o software em contêiner sempre será executado da mesma forma, independentemente do ambiente . Os contêineres isolam o software de seus arredores, por exemplo, diferenças entre ambientes de desenvolvimento e de armazenamento temporário e ajudam a reduzir os conflitos entre as equipes que executam software diferente na mesma infraestrutura.

Pieter21
fonte
5

Primeira configuração do ambiente de exportação do seu ambiente conda atual usando:

conda-env  export -n your_env_name > your_env_name.yml

exemplo:

conda-env  export -n base> base.yml

Depois de executar o comando acima, deve haver um arquivo de configuração yml no diretório atual que contém informações do seu ambiente conda

Para criar um novo ambiente usando o arquivo de configuração yml, execute:

conda-env create -n new_env -f=\path\to\base.yml 

exemplo:

conda-env create -n venv -f=base.yml

Caso o exemplo acima não funcione (devido aos vários problemas do próprio condomínio), vale sempre a pena tentar com a seguinte variação:

conda-env create --name new_env --file \path\to\base.yml 
Muhammad Umar Amanat
fonte
4

Se o seu programa for principalmente Python, você poderá confiar apenas em ambientes virtuais.

Crie ambientes virtuais para isolar suas dependências em vez de usar as bibliotecas do sistema. Em seguida, use ferramentas de ambiente virtual para duplicar seus ambientes.

No virtualenv de trabalho, crie um arquivo com a versão de cada biblioteca Python instalada:

pip freeze > requirements.txt

No novo virtualenv, peça pippara instalar essas bibliotecas com a mesma versão:

pip install -r requirements.txt

Isso garante que você obtenha as mesmas versões da lib nas duas máquinas. E como o requirements.txt é rastreado pelo seu VC, você sempre pode recriar o ambiente de uma versão antiga do seu código.

Obviamente, se você precisar de um banco de dados, um servidor Web de produção, etc., terá mais algumas etapas e não poderá confiar no virtualenv para garantir a correspondência dos dois ambientes. É aqui que o Docker intervém (consulte a resposta de Pieter21 ).

Jérôme
fonte
Não notei a anacondaetiqueta na sua pergunta. Não tenho experiência com isso, mas tenha cuidado. Eu acho que o anaconda tem sua própria maneira de gerenciar ambientes e usar os dois e virtualenvpode causar problemas. No entanto, suponho que o anaconda ofereça recursos equivalentes.
Jérôme
1

No final desta página da documentação :

Salve pacotes para uso futuro:

conda list --export > package-list.txt

Reinstale os pacotes de um arquivo de exportação:

conda create -n myenv --file package-list.txt
Miladiouss
fonte
1

Um resumo das maneiras existentes de criar um ambiente baseado em outro:

  • Clonando um ambiente :

    • Em um ambiente existente:

      $ conda create --name ORIG_ENV_NAME --clone CLONE_ENV_NAME

    • De um arquivo de ambiente exportado na mesma máquina:

      $ conda create --name ENV_NAME —-file FILE_NAME.yml

    • De um arquivo de ambiente exportado em uma máquina diferente:
      $ conda env export > ENV_NAME.yml
      $ conda env create -f ENV_NAME.yml```
Shayan Amani
fonte
$ conda create --name NEW_ENV_NAME --clone ORIG_ENV_NAME
B. Sun
0

One-liner

conda create --clone source_env --name destination_env

salhin
fonte