¿Conda actualiza los paquetes desde pypi instalados usando pip install?

Uso Anaconda (porque es increíble), y los paquetes disponibles a través de la conda install son bastante extensos . Sin embargo, de vez en cuando necesito instalar un paquete que no esté disponible en los repositorys de conda, y así obtenerlo desde pypi.

Mi pregunta: cuando ejecuto el comando conda update --all , ¿también conda actualizará estos paquetes pypi? ¿O tengo que actualizarlos por separado? Los documentos de Conda no parecen contener una respuesta a esto. Esta pregunta y respuesta parece indicar que no, conda no administra los paquetes pypi, pero aún no estoy seguro.

No, la conda update y la conda install no actualizan los paquetes instalados con pip (o los instalan usando pip ).

Estos comandos de conda solo verifican sus canales de anaconda “predeterminados” o los especificados con -c , ignoran todo lo demás. Una excepción es la conda list que muestra también los paquetes instalados con pip , estos están marcados con y no se actualizarán.

Un ejemplo usando pip y six :

 $ conda create -n testenv python=3.5 Fetching package metadata ................. Solving package specifications: . Package plan for installation in environment testenv: The following NEW packages will be INSTALLED: pip: 9.0.1-py35_1 python: 3.5.3-3 setuptools: 27.2.0-py35_1 vs2015_runtime: 14.0.25123-0 wheel: 0.29.0-py35_0 Proceed ([y]/n)? y $ activate testenv 

Instalando six con pip (versión antigua):

 (testenv) $ pip install six==1.6 Collecting six==1.6 Downloading six-1.6.0-py2.py3-none-any.whl Installing collected packages: six Successfully installed six-1.6.0 

conda update no la actualiza (tenga en cuenta que six no aparecen en la lista de “todos los paquetes solicitados”, pero sí en la lista de conda list ):

 (testenv) $ conda update --all Fetching package metadata ................. Solving package specifications: . # All requested packages already installed. # packages in environment at testenv: # pip 9.0.1 py35_1 python 3.5.3 3 setuptools 27.2.0 py35_1 vs2015_runtime 14.0.25123 0 wheel 0.29.0 py35_0 (testenv) $ conda list # packages in environment at testenv: # pip 9.0.1 py35_1 python 3.5.3 3 setuptools 27.2.0 py35_1 six 1.6.0  vs2015_runtime 14.0.25123 0 wheel 0.29.0 py35_0 

Pero se puede actualizar con pip :

 (testenv) $ pip install six --upgrade Collecting six Using cached six-1.10.0-py2.py3-none-any.whl Installing collected packages: six Found existing installation: six 1.6.0 Uninstalling six-1.6.0: Successfully uninstalled six-1.6.0 Successfully installed six-1.10.0 

Solo para mostrar que hay una versión más nueva de six en el canal de anaconda (que se ignoró cuando hice la conda update ):

 (testenv) $ conda install six Fetching package metadata ................. Solving package specifications: . Package plan for installation in environment testenv: The following NEW packages will be INSTALLED: six: 1.10.0-py35_0 Proceed ([y]/n)? 

Conda 4.6 tiene una función experimental para permitir la interoperabilidad con paquetes instalados por pip. Utilice conda config --set pip_interop_enabled true . Los paquetes de Python no instalados con Conda que pueden ser “gestionados” por Conda (es decir, eliminados) pueden actualizarse / modificarse para satisfacer la solución actual. Paquetes manejables fueron instalados típicamente de ruedas. Los Sdists instalados con versiones más recientes de pip también son típicamente manejables. Sin embargo, conda no cambiará el paquete no instalado conde para un paquete conda si las versiones son equivalentes.

Los paquetes de Python no instalados con Conda que no se pueden administrar anclarán el entorno en su lugar hasta que se eliminen por otros medios. Un ejemplo de paquetes que no se pueden administrar son las instalaciones “editables” que usaron pip install -e .

Todo esto se aplica a la conda update --all .