Al instalar paquetes en requirements.txt usando Conda a través del siguiente comando
conda install --yes --file requirements.txt
Si un paquete en requirements.txt no está disponible, arroja un "Error de no paquete" como el que se muestra a continuación:
Usando el sitio de API de Anaconda Cloud https://api.anaconda.org
Obteniendo metadatos del paquete: ....
Error: No se encontraron paquetes en los canales actuales de linux-64 que coincidan: nimfa == 1.2.3
Puede buscar este paquete en anaconda.org con
anaconda search -t conda nimfa ==1.2.3
En lugar de lanzar un error, ¿es posible cambiar este comportamiento de manera que instale todos los paquetes disponibles en requirements.txt y arroje una advertencia para los que no están disponibles?
Me gustaría esto porque, el paquete nimfa que el error dice no está disponible, se puede instalar pip. Entonces, si puedo cambiar el comportamiento de conda install --yes --file requirements.txt
para lanzar una advertencia para los paquetes no disponibles, puedo seguir con el comando pip install -r requirments.txt
en .travis.yml para que TravisCI intente instalarlo desde cualquier lugar donde esté disponible.
pip install
paquetes que no están disponibles de forma automáticaconda install
mientras se itera?FOR /F "delims=~" %f in (requirements.txt) DO conda install --yes "%f" || pip install "%f"
Funciona muy bien. ¡Gracias!while read req; do if [[ $req != "#"* ]]; then conda install --yes $requirement || pip install $requirement; fi; done < requirements.txt
Puede hacer esto como se menciona en este
Exportar a archivo .yml
Reproducir:
fuente
Para aquellos que buscan, utilicé esto como la solución de @TillHoffmann para la concha de pescado:
$ while read requirement; conda install --yes $requirement; end < requirements.txt
Y
$ while read requirement; conda install --yes $requirement;or pip install $requirement; end < requirements.txt
fuente
La respuesta de Pbms aquí es la forma correcta de hacerlo, asumiendo que tiene un entorno existente para copiar. Conda es totalmente capaz de instalar tanto los paquetes Conda como los paquetes pip, como se indica en
environment.yml
. Quería documentar todo el proceso con más detalle. Tenga en cuenta que estoy usando entornos basados en carpetas, por lo que agregué--prefix [path to environment folder]
a la mayoría de los comandos.Supongamos que instaló un entorno para un proyecto existente en una carpeta llamada
env
en la carpeta actual, como esta:Generarías
environment.yml
para el entorno de ese proyecto de esta manera:Crearía un nuevo entorno dentro de otra carpeta copiando
environment.yml
allí y luego ejecutando esto desde allí:Obtendría un entorno ya existente para que coincida
environment.yml
copiando una vez másenvironment.yml
allí y luego ejecutando esto desde allí:Con el entorno en cuestión activo, verificaría el estado de sus paquetes de esta manera:
Esta es una versión abreviada de lo que podría imprimir ese comando (tenga en cuenta que los paquetes pip están 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 es una versión abreviada de lo que
environment.yml
podría parecer (tenga en cuenta que los paquetes pip se enumeran en su propia categoría):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
Tenga en cuenta que usar Conda y pip juntos puede causar algo de acidez estomacal porque, sin saberlo, pueden acabar con las dependencias del otro. Se supone que debes instalar primero todos tus paquetes Conda y luego todos tus paquetes pip, en lugar de alternar entre los dos. Si su entorno se rompe, la recomendación oficial es eliminarlo y volver a crearlo (desde su
environment.yml
archivo). Para obtener más detalles, consulte esta guía:https://www.anaconda.com/using-pip-in-a-conda-environment/
fuente