¿Cómo hago un seguimiento de los paquetes instalados por pip en un entorno Anaconda (Conda)?


He instalado y he estado usando la distribución de Python Anaconda, y he comenzado a usar el entorno Anaconda (Conda). Puedo usar el comando estándar conda install... para poner paquetes de la distribución en mis entornos, pero para usar cualquier cosa fuera (por ejemplo, Flask-WTF, flask-sqlalchemy y alembic) necesito usar pip install en el entorno activo. Sin embargo, cuando miro el contenido del entorno, ya sea en el directorio, o usando conda list estos pip installpaquetes ed no aparece.

Usando pip freeze y pip list simplemente enumera cada paquete que he instalado.

¿Hay alguna manera de hacer un seguimiento de lo que hay en cada una de mis Anacondas env s (tanto pip como conda instaladas)?

Author: Peter Mortensen, 2013-09-05

9 answers

Conda-env ahora hace esto automáticamente (si pip fue instalado con conda).

Puede ver cómo funciona esto utilizando la herramienta de exportación utilizada para migrar un entorno:

conda env export -n <env-name> > environment.yml

El fichero listará tanto los paquetes conda como los paquetes pip:

name: stats
channels:
  - javascript
dependencies:
  - python=3.4
  - bokeh=0.9.2
  - numpy=1.9.*
  - nodejs=0.10.*
  - flask
  - pip:
    - Flask-Testing

Si está buscando continuar con la exportación del entorno, mueva environment.yml a la nueva máquina host y ejecute:

conda env create -f path/to/environment.yml
 95
Author: conner.xyz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-03 20:50:23

conda solo hará un seguimiento de los paquetes que instaló. Y pip le dará los paquetes que se instalaron usando el propio instalador pip o que usaron setuptools en su setup.py por lo que la compilación de conda generó la información de egg. Así que básicamente tienes tres opciones.

  1. Puede tomar la unión de conda list y pip freeze y administrar los paquetes que se instalaron usando conda (que se muestran en el conda list) con el gestor de paquetes conda y los que se instalan con pip (que se muestran en pip freeze, pero no en conda list) con pip.

  2. Instale en su entorno solo el python, pip y distribute empaqueta y administra todo con pip. (Esto no es tan trivial si estás en Windows...)

  3. Construya sus propios paquetes conda, y administre todo con conda.

Personalmente recomendaría la tercera opción ya que es muy fácil construir paquetes conda. Hay un repositorio git de recetas de ejemplo en el la cuenta de Github de Continuum. Pero por lo general se reduce a:

 conda skeleton pypi PACKAGE
 conda build PACKAGE

O simplemente:

conda pipbuild PACKAGE

También cuando los hayas construido una vez, puedes subirlos a https://binstar.org / y simplemente instale desde allí.

Entonces tendrás todo administrado usando conda.

 64
Author: Viktor Kerkez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-17 11:36:27

Hay una rama de conda (new-pypi-install) que añade una mejor integración con pip y PyPI. En particular, conda list también mostrará los paquetes pip instalados y conda install primero intentará encontrar un paquete conda y, en su defecto, utilizará pip para instalar el paquete.

Esta rama está programada para ser fusionada a finales de esta semana para que la versión 2.1 de conda tenga una mejor integración de pip con conda.

 23
Author: Travis Oliphant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-05 21:19:33

Seguí la respuesta de @Viktor Kerkez y he tenido un éxito mixto. Encontré que a veces esta receta de

PAQUETE pypi esqueleto Conda

PAQUETE DE compilación Conda

Parecería que todo funcionó, pero no pude importar el PAQUETE con éxito. Recientemente pregunté sobre esto en el grupo de usuarios Anaconda y escuché a @Travis Oliphant sobre la mejor manera de usar conda para construir y administrar paquetes que no se envían con Anaconda. Puedes leer este hilo aquí, pero describiré el enfoque a continuación para que las respuestas a la pregunta de la OP sean más completas...

Ejemplo: Voy a instalar el excelente paquete prettyplotlib en Windows usando conda 2.2.5.

1a) conda build --build-recipe prettyplotlib

Verás que todos los mensajes de compilación se ven bien hasta la sección de PRUEBA final de la compilación. Vi este error

Archivo "C:\Anaconda\conda-bld\test-tmp_dir\run_test.py", línea 23 importar None SyntaxError: cannot assign to None TESTS FAILED: prettyplotlib-0.1.3-py27_0

1b) Entra en /conda-recipes/prettyplotlib y edita el meta.archivo yaml. Actualmente, los paquetes que se configuran como en el paso 1a dan como resultado archivos yaml que tienen un error en la sección test. Por ejemplo, así es como el mío buscó prettyplotlib

test:   # Python imports   imports:
    - 
    - prettyplotlib
    - prettyplotlib

Edite esta sección para eliminar la línea en blanco precedida por la línea - y también elimine la línea prettyplotlib redundante. En el momento de esto escribiendo he encontrado que necesito editar la mayoría de meta.archivos yaml como este para paquetes externos que estoy instalando con conda, lo que significa que hay una línea de importación en blanco que causa el error junto con una importación redundante del paquete dado.

1c) Vuelva a ejecutar el comando desde 1a, que debería completarse con error esta vez. Al final de la compilación se te preguntará si quieres subir la compilación a binstar. Ingresé No y luego vi este mensaje:

Si desea subir este paquete a binstar.org más tarde, escriba:

Bin carga de binstar C:\Anaconda\conda-bld\win-64\prettyplotlib-0.1.3-py27_0.tar.bz2

Ese archivo tar.bz2 es la compilación que ahora necesita instalar realmente.

2) conda install C:\Anaconda\conda-bld\win-64\prettyplotlib-0.1.3-py27_0.tar.bz2

Siguiendo estos pasos he usado conda para instalar una serie de paquetes que no vienen con Anaconda. Anteriormente, había instalado algunos de estos usando pip, así que lo hice pip uninstall PACKAGE antes de instalar el PAQUETE con conda. Usando conda, ahora puedo administrar (casi) todos mis paquetes con un solo enfoque en lugar de tener una mezcla de cosas instaladas con conda, pip, easy_install y python setup.py instalar.

Para el contexto, creo que esta entrada de blog reciente por @Travis Oliphant será útil para las personas como yo que no aprecian todo lo que entra en el empaquetado robusto de Python, pero ciertamente aprecian cuando las cosas "simplemente funcionan". conda parece un gran camino a seguir...

 16
Author: Josh Hemann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-02 16:58:59

Esta es la razón por la que escribí Exigente: http://picky.readthedocs.io /

Es un paquete python que rastrea paquetes instalados con pip o conda en virtualenvs y conda envs.

 8
Author: Chris Withers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-28 15:58:25

Creo que lo que falta aquí es que cuando lo haces:

>pip install .

Para instalar un paquete local con un setup.py, instala un paquete que es visible para todos los envs de conda que usan la misma versión de python. Nota Estoy usando la versión conda de pip!

Por ejemplo, si estoy usando python2.7 pone el paquete local aquí:

/ usr / local/anaconda/lib/python2.7 / site-packages

Si luego creo un nuevo env conda con python=2.7 (=the por defecto):

>conda create --name new

>source activate new

Y luego hacer:

(new)>conda list    // empty - conda is not aware of any packages yet

Sin embargo, si lo hago:

(new)>pip list      // the local package installed above is present

Así que en este caso, conda no conoce el paquete pip, pero el paquete está disponible para python.

Sin embargo, si en su lugar instalo el paquete local (nuevamente usando pip) después de he creado (y activado) el nuevo env de conda, ahora conda lo ve:

(new)>conda list   // sees that the package is there and was installed by pip

Así que creo que la interacción entre conda y pip tiene algunos problemas-es decir, el uso de pip para instalar un paquete local desde dentro de un env de conda hace que ese paquete esté disponible (pero no se ve a través de la lista de conda) para todos los otros env de conda de la misma versión de python.

 3
Author: M.H.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-21 19:14:48

conda env export lista todos los paquetes conda y pip en un entorno. conda-env debe estar instalado en la raíz conda (conda install -c conda conda-env).

Para escribir un archivo environment.yml describiendo el entorno actual:

conda env export > environment.yml

Referencias:

 2
Author: Wes Turner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-11 08:26:01

Normalmente le pongo el prefijo a la carpeta 'bin/pip' para el entorno específico en el que desea instalar el paquete antes del comando 'pip'. Por ejemplo, si desea instalar pymc3 en el entorno py34, debe usar este comando:

~/anaconda/envs/py34/bin/pip install git+https://github.com/pymc-devs/pymc3 

Básicamente solo necesita encontrar la ruta correcta a la carpeta 'bin/pip' de su entorno y colocarla antes del comando install.

 2
Author: Gianluca,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-20 17:57:50

My which pip muestra la siguiente ruta:

$ which pip
/home/kmario23/anaconda3/bin/pip

Entonces, cualquier paquete que instale usando pip install <package-name> tendrá que reflejarse en la lista de paquetes cuando la lista se exporte usando:

$ conda list --export > conda_list.txt

Pero, no lo hago. Así que, en su lugar, usé el siguiente comando como lo sugirieron varios otros:

# get environment name by
$ conda-env list

# get list of all installed packages by (conda, pip, etc.,)
$ conda-env export -n <my-environment-name> > all_packages.yml
# if you haven't created any specific env, then just use 'root'

Ahora, puedo ver todos los paquetes en mi archivo all-packages.yml.

 0
Author: kmario23,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-25 02:56:15