Ao instalar pacotes em requirements.txt usando Conda por meio do seguinte comando
conda install --yes --file requirements.txt
Se um pacote em requirements.txt não estiver disponível, ele gerará um "Erro de nenhum pacote", como o mostrado abaixo:
Usando o site da API Anaconda Cloud https://api.anaconda.org
Buscando metadados do pacote: ....
Erro: Nenhum pacote encontrado nos canais atuais do linux-64 correspondente: nimfa == 1.2.3
Você pode procurar por este pacote em anaconda.org com
anaconda search -t conda nimfa ==1.2.3
Em vez de gerar um erro, é possível alterar esse comportamento de forma que instale todos os pacotes disponíveis em requirements.txt e gere um aviso para aqueles que não estão disponíveis?
Eu gostaria disso porque, o pacote nimfa que o erro diz não está disponível, pode ser instalado por pip. Portanto, se eu puder alterar o comportamento de conda install --yes --file requirements.txt
apenas lançar um aviso para pacotes indisponíveis, posso seguir com o comando pip install -r requirments.txt
em .travis.yml para que o TravisCI tente instalá-lo de qualquer lugar onde estiver disponível.
pip install
pacotes que não estão disponíveis usandoconda install
, durante a iteração?FOR /F "delims=~" %f in (requirements.txt) DO conda install --yes "%f" || pip install "%f"
Funciona muito bem. Obrigado!while read req; do if [[ $req != "#"* ]]; then conda install --yes $requirement || pip install $requirement; fi; done < requirements.txt
Você pode fazer isso conforme mencionado em neste
Exportar para arquivo .yml
Reproduzir:
fonte
Para quem procura, usei isso como a solução de @TillHoffmann para a concha de peixe:
$ while read requirement; conda install --yes $requirement; end < requirements.txt
E
$ while read requirement; conda install --yes $requirement;or pip install $requirement; end < requirements.txt
fonte
A resposta do Pbms aqui é a maneira certa de fazer isso, supondo que você tenha um ambiente existente para copiar. Conda é totalmente capaz de instalar pacotes Conda e pacotes pip, conforme listado em
environment.yml
. Eu queria documentar todo o processo com mais detalhes. Observe que estou usando ambientes baseados em pastas, e é por isso que adicionei--prefix [path to environment folder]
à maioria dos comandos.Digamos que você instalou um ambiente para um projeto existente em uma pasta chamada
env
na pasta atual, assim:Você geraria
environment.yml
para o ambiente desse projeto assim:Você criaria um novo ambiente dentro de alguma outra pasta, copiando
environment.yml
para lá e executando a partir daí:Você obteria um ambiente já existente para corresponder
environment.yml
, copiando novamenteenvironment.yml
para lá e executando isto a partir daí:Com o ambiente em questão ativo, você verificaria o estado de seus pacotes assim:
conda list
Esta é uma versão resumida do que esse comando pode imprimir (observe que os pacotes pip estão marcados
pypi
):# Name Version Build Channel pip 19.2.2 py37_0 python 3.7.4 h5263a28_0 numpy 1.16.4 py37h19fb1c0_0 pandas 0.25.1 py37ha925a31_0 pyodbc 4.0.27 py37ha925a31_0 ibm-db 3.0.1 pypi_0 pypi ibm-db-sa 0.3.5 pypi_0 pypi
Finalmente, esta é uma versão resumida do que
environment.yml
pode ser (observe que os pacotes pip estão listados em sua própria categoria):dependencies: - pip=19.2.2=py37_0 - python=3.7.4=h5263a28_0 - numpy=1.16.4=py37h19fb1c0_0 - pandas=0.25.1=py37ha925a31_0 - pyodbc=4.0.27=py37ha925a31_0 - pip: - ibm-db==3.0.1 - ibm-db-sa==0.3.5
Esteja ciente de que usar Conda e pip juntos pode causar alguma azia porque eles podem, sem saber, explodir as dependências um do outro. Você deve instalar todos os seus pacotes Conda primeiro e, em seguida, todos os pacotes pip, em vez de alternar entre os dois. Se o seu ambiente quebrar, a recomendação oficial é excluí-lo e recriá-lo (de seu
environment.yml
arquivo). Para obter mais detalhes, consulte este guia:https://www.anaconda.com/using-pip-in-a-conda-environment/
fonte