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;)
Respostas:
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:
E recrie-o usando:
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:
que você ativa usando:
fonte
conda create
ouconda env create
ao compartilhar / recriar um ambiente. Poderia, por favor, detalhar mais por que você recomenda o usoconda env create
nessa situação?conda create
econda env create
aqui: groups.google.com/a/continuum.io/forum/#!topic/conda/… Dito isso, acho que você geralmente pode usá-las de forma intercambiável.conda create
vsconda 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?).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.conda list --explicit > FILE_NAME
exporta binários para a plataforma atual e aparentemente não funciona em outra.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.
fonte
Primeira configuração do ambiente de exportação do seu ambiente conda atual usando:
exemplo:
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:
exemplo:
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:
fonte
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:
No novo virtualenv, peça
pip
para instalar essas bibliotecas com a mesma versão: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 ).
fonte
anaconda
etiqueta 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 evirtualenv
pode causar problemas. No entanto, suponho que o anaconda ofereça recursos equivalentes.No final desta página da documentação :
Salve pacotes para uso futuro:
Reinstale os pacotes de um arquivo de exportação:
fonte
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
fonte
$ conda create --name NEW_ENV_NAME --clone ORIG_ENV_NAME
One-liner
conda create --clone source_env --name destination_env
fonte