python - para - ¿Cómo puedo hacer un seguimiento de los paquetes instalados por pip en un entorno Anaconda(Conda)?
pip install conda (9)
He instalado y he estado usando la distribución Anaconda Python, y he comenzado a usar el entorno Anaconda (Conda). Puedo usar el conda install...
estándar conda install...
para colocar paquetes de la distribución en mis entornos, pero para usar algo externo (es decir, Flask-WTF, frasco-sqlalchemy y alambique) necesito usar la pip install
en el entorno activo. Sin embargo, cuando miro el contenido del entorno, ya sea en el directorio o usando la conda list
estos paquetes de pip install
no se muestran.
El uso de la pip freeze
y la pip list
solo enumera cada paquete que he instalado.
¿Hay alguna manera de hacer un seguimiento de lo que hay en cada uno de mis conda
Anaconda (tanto pip
como conda
instalados)?
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 conda envs que usan la misma versión de python. Note que estoy usando la versión conda de pip!
por ejemplo, si estoy usando python2.7, coloca el paquete local aquí:
/usr/local/anaconda/lib/python2.7/site-packages
Si más tarde creo un nuevo env conda con python = 2.7 (= el valor predeterminado):
>conda create --name new
>source activate new
Y luego hazlo:
(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
Entonces, en este caso, conda no sabe sobre 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 haber creado (y activado) el nuevo conda env, 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, usar pip para instalar un paquete local desde dentro de una conda env hace que ese paquete esté disponible (pero no visto a través de conda list) para todos los conda envs de la misma versión de python.
Es por eso que escribí Picky: http://picky.readthedocs.io/
Es un paquete de Python que rastrea los paquetes instalados tanto con pip como conda en virtualenvs y conda envs.
Hay una rama de conda (new-pypi-install) que agrega una mejor integración con pip y PyPI. En particular, la lista de conda también mostrará los paquetes instalados de pip y la instalación de conda intentará primero encontrar un paquete de conda y, en su defecto, usará pip para instalar el paquete.
Esta rama está programada para fusionarse a finales de esta semana, de modo que la versión 2.1 de la conda tendrá una mejor integración de pip con conda.
Mi 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, yo no. Entonces, en cambio, utilicé 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
.
Normalmente prefijo 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 de instalación.
Seguí la respuesta de @Viktor Kerkez y tuve un éxito mixto. Encontré que a veces esta receta de
conda esqueleto pypi PAQUETE
conda build PAQUETE
parecería que todo funcionó, pero no pude importar con éxito el PAQUETE. Hace poco pregunté sobre esto en el grupo de usuarios de Anaconda y escuché de @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 here , pero voy a describir el siguiente enfoque para que las respuestas a la pregunta del OP sean más completas ...
Ejemplo: voy a instalar el excelente paquete de prettyplotlib en Windows usando conda 2.2.5.
1a) conda build --build-recipe prettyplotlib
Verá 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 importación Ninguno SyntaxError: no se puede asignar a Ninguno PRUEBAS FALLADAS: prettyplotlib-0.1.3-py27_0
1b) Vaya a / conda-recipes / prettyplotlib y edite el archivo meta.yaml. Actualmente, los paquetes que se configuran como en el paso 1a resultan en archivos yaml que tienen un error en la sección de test
. Por ejemplo, así es como el mío buscó a prettyplotlib
test: # Python imports imports:
-
- prettyplotlib
- prettyplotlib
Edite esta sección para eliminar la línea en blanco precedida por - y también elimine la línea redundante prettyplotlib. Al momento de escribir estas líneas, he encontrado que necesito editar la mayoría de los archivos meta.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 sin error esta vez. Al final de la construcción, se te preguntará si deseas subir la construcción a https://binstar.org/ . Ingresé No y luego vi este mensaje:
Si desea cargar este paquete a binstar.org más tarde, escriba:
$ binstar upload 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 exitosamente conda para instalar varios paquetes que no vienen con Anaconda. Anteriormente, había instalado algunos de estos usando pip, así que pip uninstall PACKAGE
antes de instalar el PAQUETE con conda. Al usar 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 install.
En cuanto al contexto, creo que esta reciente publicación de blog de @Travis Oliphant será útil para personas como yo que no aprecian todo lo que entra en un paquete robusto de Python, pero ciertamente aprecian cuando las cosas "simplemente funcionan". conda parece una gran manera de avanzar ...
conda-env ahora hace esto automáticamente (si pip se instaló con conda).
Puede ver cómo funciona esto al usar la herramienta de exportación utilizada para migrar un entorno:
conda env export -n <env-name> > environment.yml
El archivo mostrará una lista de paquetes conda y 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 desea seguir 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
conda env export
enumera todos los paquetes de conda y pip en un entorno. conda-env
debe instalarse en la raíz de conda install -c conda conda-env
( conda install -c conda conda-env
).
Para escribir un archivo environment.yml
que describa el entorno actual:
conda env export > environment.yml
Referencias
conda
solo hará un seguimiento de los paquetes que instaló. Y pip
le dará los paquetes que fueron instalados usando el instalador pip
o usaron setuptools
en su setup.py
para que conda build generara la información del huevo. Entonces tienes básicamente tres opciones.
Puede tomar la unión de la
conda list
y lapip freeze
y administrar paquetes que se instalaron usandoconda
(que se muestra en laconda list
) con elconda
paquetes deconda
y los que están instalados conpip
(que se muestran enpip freeze
pero no enconda list
) conpip
.Instale en su entorno solo
python
,pip
ydistribute
paquetes y administre todo conpip
. (Esto no es tan trivial si estás en Windows ...)Cree sus propios paquetes de
conda
y administre todo conconda
.
Personalmente, recomendaría la tercera opción, ya que es muy fácil crear paquetes de conda
. Hay un repositorio git de recetas de ejemplo en la cuenta github del continuo. Pero generalmente se reduce a:
conda skeleton pypi PACKAGE
conda build PACKAGE
o solo:
conda pipbuild PACKAGE
Además, cuando los haya creado una vez, puede cargarlos a https://binstar.org/ e instalar desde allí.
Entonces tendrás todo administrado usando conda
.