¿Deberían usarse conda o conda-forge para entornos Python?

127

Conday conda-forgeson ambos administradores de paquetes de Python. ¿Cuál es la opción adecuada cuando existe un paquete en ambos repositorios? Django, por ejemplo, se puede instalar con cualquiera de los dos, pero la diferencia entre ambos es de varias dependencias (conda-forge tiene muchas más). No hay explicación para estas diferencias, ni siquiera un simple LÉAME.

¿Cuál debería ser usado? ¿Conda o conda-forge? ¿Importa?

tilikoom
fuente
55
"Conda y conda-forge son administradores de paquetes de Python". No creo que sea verdad. No creo que ni siquiera estén en la misma categoría de cosas. condaes un administrador de paquetes y conda-forgees un canal. Tal vez era cierto cuando se hizo esta pregunta?
Endolith

Respuestas:

201

La respuesta corta es que, en mi experiencia en general, no importa cuál uses.

La respuesta larga:

Entonces, conda-forgees un canal adicional desde el cual se pueden instalar paquetes. En este sentido, no es más especial que el canal predeterminado, o cualquiera de los otros cientos (¿miles?) De canales en los que la gente ha publicado paquetes. Puede agregar su propio canal si se registra en https://anaconda.org y carga sus propios paquetes de Conda.

Aquí tenemos que hacer la distinción, que creo que no está claro por su formulación en la pregunta, entre condael administrador de paquetes multiplataforma y conda-forgeel canal de paquetes. Anaconda Inc. (anteriormente Continuum IO), los principales desarrolladores del condasoftware, también mantienen un canal separado de paquetes, que es el valor predeterminado cuando escribe conda install packagenamesin cambiar ninguna opción.

Hay tres formas de cambiar las opciones para los canales. Los dos primeros se realizan cada vez que instala un paquete y el último es persistente. El primero es especificar un canal cada vez que instala un paquete:

conda install -c some-channel packagename

Por supuesto, el paquete tiene que existir en ese canal. De esta manera se instalará packagenamey todas sus dependencias de some-channel. Alternativamente, puede especificar:

conda install some-channel::packagename

El paquete todavía tiene que existir some-channel, pero ahora, solo packagenamese extraerá de él some-channel. Se buscará cualquier otro paquete que sea necesario para satisfacer las dependencias de su lista predeterminada de canales.

Para ver la configuración de su canal, puede escribir:

conda config --show channels

Puede controlar el orden en que se buscan los canales conda config. Puedes escribir:

conda config --add channels some-channel

para agregar el canal some-channelal principio de la channelslista de configuración. Esto le da some-channella más alta prioridad. La prioridad determina ( en parte ) qué canal se selecciona cuando más de un canal tiene un paquete en particular. Para agregar el canal al final de la lista y darle la prioridad más baja, escriba

conda config --append channels some-channel

Si desea eliminar el canal que agregó, puede hacerlo escribiendo

conda config --remove channels some-channel

Ver

conda config -h

Para más opciones.

Dicho todo esto, hay cuatro razones principales para usar el conda-forgecanal en lugar del defaultscanal mantenido por Anaconda:

  1. Los paquetes conda-forge pueden estar más actualizados que los del defaultscanal.
  2. Hay paquetes en el conda-forgecanal que no están disponibles endefaults
  3. Preferiría usar una dependencia como openblas(desde conda-forge) en lugar de mkl(desde defaults).
  4. Si está instalando un paquete que requiere una biblioteca compilada (por ejemplo, una extensión C o un contenedor alrededor de una biblioteca C), puede reducir la posibilidad de incompatibilidades si instala todos los paquetes en un entorno desde un solo canal debido a un binario compatibilidad de la biblioteca base C (pero este consejo puede estar desactualizado / cambiar en el futuro).
Darthbith
fuente
1
¡Gracias! Tengo dos preguntas relacionadas: 1. ¿Cómo puedo averiguar qué canal es bueno probar y? 2. después de configurar en un canal, ¿cómo puedo restablecerlo a los valores predeterminados?
Daniel
1
@ Kenny Para responder a su primera pregunta, debe buscar el paquete que desea en anaconda.org y ver qué canales tienen el paquete. Edité la respuesta para responder a su segunda pregunta. Sin embargo, también señalaría que si desea instalar un solo paquete desde un canal, probablemente sea más fácil usar la conda install -c some-channel packagenameforma de escribir el comando
darthbith
¡esto es genial! ¿Hay una comparación disponible entre conda-forge y conda en términos de # de módulos compatibles, frescura, cobertura, etc.?
Rutger Hofste
1
¿No es mklmás rápido que openblas?
endolito
3
@endolith Quizás, pero 1) posiblemente solo en procesadores Intel y 2) no es de código abierto
darthbith
4

Anaconda ha cambiado sus Términos de servicio para que los "grandes usuarios comerciales" tengan que pagar, lo que no incluye el conda-forgecanal.

Probablemente quiera seguir conda-forgesi no quiere pagar por el uso. Como se indica en los documentos :

conda config --add channels conda-forge
conda config --set channel_priority strict
conda install <package-name>

También puede usar miniforge, que tiene conda-forgecomo canal predeterminado y admite plataformas ppc64le y aarch64, así como las otras plataformas habituales.

adrin
fuente
3

El canal conda-forge es donde puede encontrar paquetes que se han creado para conda pero que aún no forman parte de la distribución oficial de Anaconda.

En general, puede usar cualquiera de ellos.

Ashiq Imran
fuente
1

Hay algunas bibliotecas de Python que no puede instalar de manera simple conda installya que su canal no está disponible a menos que aplique conda-forge. Desde mi experiencia, pip es más genérico para buscar en diferentes fuentes de canales que conda. Por ejemplo, si desea instalar python-constraint, puede hacerlo a través de pip installpero instalarlo a través de ** cond **. tienes que especificar el canal - conda-forge.

conda install -c conda-forge python-constraint // works

pero no

conda install python-constraint
ewalel
fuente
Respuesta confusa la instalación de pip lleva el paquete fuera de la propia administración de paquetes y la verificación de dependencia de conda, lo que significa que debe administrarlo (y potencialmente sus dependencias) manualmente y que los comandos como conda update --allno actualizarán el paquete instalado de pip
Jean Monet