python - instalar - Instale solo paquetes disponibles usando "conda install--yes--file required.txt" sin error
instalar anaconda python (4)
Al instalar paquetes en require.txt usando Conda a través del siguiente comando
conda install --yes --file requirements.txt
Si un paquete en required.txt no está disponible, arroja un mensaje "Sin error de paquete" como el que se muestra a continuación:
Uso del sitio api de Anaconda Cloud https://api.anaconda.org
Obteniendo metadatos del paquete: ....
Error: no se encontraron paquetes en la coincidencia actual de canales de linux-64: nimfa == 1.2.3
Puede buscar este paquete en anaconda.org con
anaconda search -t conda nimfa ==1.2.3
En lugar de arrojar un error, ¿es posible cambiar este comportamiento de modo que instale todos los paquetes disponibles en require.txt y arroje una advertencia para aquellos que no están disponibles?
Me gustaría esto porque, el paquete nimfa que el error dice que 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 intenta instalarlo desde cualquier lugar donde esté disponible.
La respuesta de Pbms aquí es la forma correcta de hacerlo, suponiendo que tenga un entorno existente para copiar.
Conda es totalmente capaz de instalar tanto paquetes Conda como paquetes pip, como se detalla en
environment.yml
.
Quería documentar todo el proceso con más detalle.
Tenga en cuenta que estoy usando entornos basados en carpetas, por eso 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, así:
conda create --prefix ./env
Generarías
environment.yml
para el
environment.yml
de ese proyecto así:
conda env export --prefix ./env > environment.yml
Crearía un nuevo entorno dentro de otra carpeta copiando
environment.yml
allí y luego ejecutando esto desde allí:
conda env create --prefix ./env --file environment.yml
Obtendría un entorno ya existente para que coincida con
environment.yml
copiando una vez más
environment.yml
allí y luego ejecutando esto desde allí:
conda env update --prefix ./env --file environment.yml --prune
Con el entorno en cuestión activo, verificaría el estado de sus paquetes de esta manera:
conda list
Esta es una versión abreviada de lo que ese comando podría imprimir (tenga en cuenta que los paquetes pip están marcados como
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 resumida de cómo se vería
environment.yml
(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 un poco de acidez estomacal porque, sin saberlo, pueden eliminar las dependencias de los demás.
Se supone que primero debe instalar todos sus paquetes de Conda y luego todos sus 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 archivo
environment.yml
).
Para más detalles, consulte esta guía:
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
Puedes hacer esto como se menciona en this
Exportar a archivo .yml
conda env export > freeze.yml
Reproducir:
conda env create -f freeze.yml
Terminé simplemente iterando sobre las líneas del archivo
$ while read requirement; do conda install --yes $requirement; done < requirements.txt
Editar : si desea instalar un paquete usando pip si no está disponible a través de conda, pruebe esto:
$ while read requirement; do conda install --yes $requirement || pip install $requirement; done < requirements.txt
Editar : si está utilizando Windows (el crédito va a @Clay ):
$ FOR /F "delims=~" %f in (requirements.txt) DO conda install --yes "%f" || pip install "%f"