Recientemente descubrí a Conda después de tener problemas para instalar SciPy, específicamente en una aplicación Heroku que estoy desarrollando.
Con Conda creas entornos, muy similares a lo que hace virtualenv . Mis preguntas son:
- Si uso Conda, ¿reemplazará la necesidad de virtualenv? Si no, ¿cómo uso los dos juntos? ¿Instalo virtualenv en Conda o Conda en virtualenv?
- ¿Todavía necesito usar pip? Si es así, ¿podré seguir instalando paquetes con pip en un entorno aislado?
Respuestas:
Conda reemplaza virtualenv. En mi opinión es mejor. No se limita a Python, sino que también se puede usar para otros idiomas. En mi experiencia, proporciona una experiencia mucho más fluida, especialmente para paquetes científicos. La primera vez que instalé MayaVi correctamente en Mac fue con
conda
.Aún puedes usar
pip
. De hecho, seconda
instalapip
en cada nuevo entorno. Conoce los paquetes instalados por pip.Por ejemplo:
enumera todos los paquetes instalados en su entorno actual. Los paquetes instalados por Conda se muestran así:
y los instalados a través de
pip
tienen el<pip>
marcador:fuente
<pip>
espectáculos que se instala con la pipa de lo contrario, se instala con Conda.La respuesta corta es, solo necesitas conda.
Conda combina efectivamente la funcionalidad de pip y virtualenv en un solo paquete, por lo que no necesita virtualenv si está usando conda.
Te sorprendería cuántos paquetes admite conda. Si no es suficiente, puede usar pip debajo de conda.
Aquí hay un enlace a la página conda que compara conda, pip y virtualenv:
https://docs.conda.io/projects/conda/en/latest/commands.html#conda-vs-pip-vs-virtualenv-commands .
fuente
Entornos virtuales y
pip
Agregaré que crear y eliminar entornos de conda es simple con Anaconda.
En un entorno activado , instale paquetes a través de
conda
opip
:Estos entornos están fuertemente vinculados a la administración de paquetes tipo pip de conda , por lo que es simple crear entornos e instalar paquetes Python y no Python.
Jupyter
Además, la instalación
ipykernel
en un entorno agrega una nueva lista en el menú desplegable Kernels de las notebooks Jupyter, extendiendo los entornos reproducibles a las notebooks. A partir de Anaconda 4.1, se agregaron nbextensions , agregando extensiones a las notebooks con mayor facilidad.Fiabilidad
En mi experiencia, conda es más rápido y más confiable al instalar bibliotecas grandes como
numpy
ypandas
. Además, si desea transferir su estado preservado de un entorno, puede hacerlo compartiendo o clonando un entorno.fuente
Instalar Conda le permitirá crear y eliminar entornos de Python como desee, por lo tanto, le proporcionará la misma funcionalidad que virtualenv .
En el caso de ambas distribuciones, podría crear un árbol de sistema de archivos aislado, donde puede instalar y eliminar paquetes de Python (probablemente, con pip) como desee. Lo que puede ser útil si desea tener diferentes versiones de la misma biblioteca para diferentes casos de uso o simplemente desea probar alguna distribución y eliminarla luego para conservar su espacio en disco.
Diferencias:
Acuerdo de licencia. Si bien virtualenv se encuentra bajo la licencia MIT más liberal , Conda usa una licencia BSD de 3 cláusulas.
Conda le proporciona su propio sistema de control de paquetes. Este sistema de control de paquetes a menudo proporciona versiones precompiladas (para la mayoría de los sistemas populares) de software popular que no es Python, lo que puede facilitar el funcionamiento de algunos paquetes de aprendizaje automático. Es decir, no tiene que compilar código C / C ++ optimizado para su sistema. Si bien es un gran alivio para la mayoría de nosotros, podría afectar el rendimiento de dichas bibliotecas.
A diferencia de virtualenv, Conda duplica algunas bibliotecas del sistema al menos en el sistema Linux. Estas bibliotecas pueden desincronizarse y provocar un comportamiento inconsistente de sus programas.
Veredicto:
Conda es excelente y debería ser tu opción predeterminada al comenzar tu camino con el aprendizaje automático. Le ahorrará algo de tiempo jugando con gcc y numerosos paquetes. Sin embargo, Conda no reemplaza virtualenv. Introduce una complejidad adicional que no siempre es deseable. Viene bajo licencia diferente. Es posible que desee evitar el uso de conda en entornos distribuidos o en hardware HPC.
fuente
conda
software y las bibliotecas instalados. Y en HPC,conda
es preferible en muchos casos, de hecho está siendo utilizado por los administradores de HPC para reemplazar cosas como losmodule
sistemas. Permite el software instalado por el usuario y un mayor aislamiento del software, dos grandes problemas en HPC. La única advertencia que tengo es que muchos sistemas de archivos HPC tienen límites estrictos en la cantidad de archivos en un directorio, y conda crea muchos miles de archivos.Utilizo ambos y (a partir de enero de 2020) tienen algunas diferencias superficiales que se prestan a diferentes usos para mí. Por defecto, Conda prefiere administrar una lista de entornos para usted en una ubicación central, mientras que virtualenv crea una carpeta en el directorio actual. El primero (centralizado) tiene sentido si, por ejemplo, está haciendo aprendizaje automático y solo tiene un par de entornos amplios que utiliza en muchos proyectos y desea acceder a ellos desde cualquier lugar. El último (por carpeta de proyecto) tiene sentido si está haciendo pequeños proyectos únicos que tienen conjuntos de requisitos de lib completamente diferentes que realmente pertenecen más al proyecto en sí.
El entorno vacío que crea Conda es de aproximadamente 122 MB, mientras que el de virtualenv es de aproximadamente 12 MB, por lo que es otra razón por la que puede preferir no dispersar los entornos de Conda en todas partes.
Finalmente, otra indicación superficial de que Conda prefiere sus envs centralizados es que (de nuevo, por defecto) si crea un env de Conda en su propia carpeta de proyecto y lo activa, el prefijo de nombre que aparece en su shell es el absoluto (demasiado largo) ruta a la carpeta. Puede solucionarlo dándole un nombre, pero virtualenv hace lo correcto de manera predeterminada.
Espero que esta información se vuelva obsoleta rápidamente ya que los dos administradores de paquetes compiten por el dominio, pero estas son las compensaciones a partir de hoy :)
fuente
pipenv
?Otra nueva opción y mi método preferido actual para poner en marcha un entorno es Pipenv
Actualmente es la herramienta de empaquetado Python recomendada oficialmente de Python.org
fuente
pipenv --two
a python2 y pipenv --Tres para python3Sí,
conda
es mucho más fácil de instalar quevirtualenv
, y prácticamente reemplaza a este último.fuente
virtualenv
con una herramienta de administración del entorno virtual más generalconda
. Además, Anaconda es solo una distribución de Python + que incluye la herramienta Conda; La pregunta (y la respuesta) son solo sobre Conda.Trabajo en corporativo, detrás de varios cortafuegos con máquina en la que no tengo acceso de administrador
En mi experiencia limitada con python (2 años), me he encontrado con pocas bibliotecas (JayDeBeApi, sasl) que al instalar a través de pip arrojaron un error de errores de dependencia de C ++: se requiere Microsoft Visual C ++ 14.0. Consíguelo con "Herramientas de compilación de Microsoft Visual C ++": http://landinghub.visualstudio.com/visual-cpp-build-tools
estos se instalaron bien con conda, por lo tanto, desde aquellos días comencé a trabajar con conda env. sin embargo, no es fácil evitar que conda instale dependencias dentro de c.programfiles donde no tengo acceso de escritura.
fuente