web-dev-qa-db-fra.com

Comment garder une trace des packages installés par pip dans un environnement Anaconda (Conda)?

J'ai installé et j'utilise la distribution Anaconda Python, et j'ai commencé à utiliser l'environnement Anaconda (Conda). Je peux utiliser la commande standard conda install... pour placer les packages de la distribution dans mes environnements, mais pour utiliser tout ce qui se trouve à l'extérieur (par exemple, Flask-WTF, flask-sqlalchemy et alembic), il est nécessaire d'utiliser pip install dans le dossier environnement actif. Cependant, lorsque je regarde le contenu de l'environnement, que ce soit dans le répertoire ou en utilisant conda list, ces packages pip installed n'apparaissent pas.

Utiliser pip freeze et pip list ne répertorie que tous les paquetages que j'ai jamais installés.

Existe-t-il un moyen de garder trace de ce qui se trouve dans chacun de mes Anaconda envs (_ pip et conda installés)?

124
gromiczek

conda-env le fait maintenant automatiquement (si pip a été installé avec conda).

Vous pouvez voir comment cela fonctionne en utilisant l'outil d'exportation utilisé pour la migration d'un environnement:

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

Le fichier listera les paquets conda et les paquets pip:

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

Si vous souhaitez exporter l'exportation de l'environnement, déplacez environment.yml vers le nouvel ordinateur hôte et exécutez:

conda env create -f path/to/environment.yml
107
conner.xyz

conda gardera uniquement une trace des paquets qu'il a installés. Et pip vous donnera les paquets qui ont été installés à l’aide du programme d’installation pip ou bien ils ont utilisé setuptools dans leur setup.py de sorte que conda build a généré les informations Egg. Donc, vous avez essentiellement trois options.

  1. Vous pouvez combiner les éléments conda list et pip freeze et gérer les packages installés à l'aide de conda (qui s'affiche dans conda list) avec le gestionnaire de packages conda. et ceux installés avec pip (qui apparaissent dans pip freeze mais pas dans conda list) avec pip.

  2. Installez dans votre environnement uniquement les packages python, pip et distribute et gérez le tout avec pip. (Ce n'est pas si trivial si vous êtes sur Windows ...)

  3. Construisez vos propres packages conda et gérez le tout avec conda.

Personnellement, je recommanderais la troisième option car il est très facile de construire des packages conda. Il existe un répertoire git d'exemples de recettes sur le compte github du continuum. Mais cela revient généralement à:

 conda skeleton pypi PACKAGE
 conda build PACKAGE

ou juste:

conda pipbuild PACKAGE

De plus, lorsque vous les avez construits une fois, vous pouvez les télécharger sur https://binstar.org/ et les installer à partir de là.

Ensuite, vous aurez tout géré avec conda.

64
Viktor Kerkez

Il existe une branche de conda (new-pypi-install) qui ajoute une meilleure intégration à pip et PyPI. En particulier, conda list montrera également les paquets installés par pip et conda install essaiera d’abord de trouver un paquet conda, faute de quoi pip utilisera pip pour l’installer.

Cette branche devrait être fusionnée plus tard cette semaine afin que la version 2.1 de conda bénéficie d’une meilleure intégration pip avec conda.

23
Travis Oliphant

J'ai suivi la réponse de @Viktor Kerkez et j'ai connu un succès mitigé. J'ai trouvé que parfois cette recette de

conda squelette pypi FORFAIT

conda build FORFAIT

ressemblerait à tout ce qui a fonctionné mais je ne pouvais pas importer avec succès PACKAGE. Récemment, j'ai posé une question à ce sujet sur le groupe d'utilisateurs d'Anaconda et j'ai entendu @ Travis Oliphant lui-même sur la meilleure façon d'utiliser conda pour créer et gérer des paquets qui ne sont pas livrés avec Anaconda. Vous pouvez lire ce fil ici , mais je décrirai l'approche ci-dessous pour que les réponses à la question du PO soient plus complètes, espérons-le ...

Exemple: je vais installer l'excellent paquetage prettyplotlib sous Windows avec conda 2.2.5.

1a) conda build --build-recipe prettyplotlib

Vous verrez que les messages de construction ont tous une belle apparence jusqu'à la dernière section TEST de la construction. J'ai vu cette erreur

Fichier "C:\Anaconda\conda-bld\test-rép_tmp\run_test.py", ligne 23 importation Aucune SyntaxError: impossible d'affecter à Aucune TESTS FAILE: prettyplotlib-0.1.3-py27_0

1b) Allez dans/conda-recipes/prettyplotlib et éditez le fichier meta.yaml. Actuellement, les packages configurés comme à l'étape 1a génèrent des fichiers yaml qui comportent une erreur dans la section test. Par exemple, voici comment le mien a cherché prettyplotlib

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

Modifiez cette section pour supprimer la ligne vierge précédée de - et également pour supprimer la ligne prettyplotlib redondante. Au moment de la rédaction de ce document, j’ai constaté que je devais éditer la plupart des fichiers meta.yaml de ce type pour les packages externes que j’installais avec conda, ce qui signifie qu’il existe une ligne d’importation vierge à l'origine de l'erreur ainsi qu'une importation redondante du package donné. .

1c) Relancez la commande de 1a, qui devrait se terminer sans erreur cette fois. À la fin de la construction, il vous sera demandé si vous souhaitez télécharger la version sur binstar . Je suis entré non et puis vu ce message:

Si vous souhaitez télécharger ce package sur binstar.org ultérieurement, tapez:

$ binstar upload C:\Anaconda\conda-bld\win-64\prettyplotlib-0.1.3-py27_0.tar.bz2

Ce fichier tar.bz2 est la version que vous devez maintenant installer.

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

En suivant ces étapes, j'ai utilisé avec succès conda pour installer un certain nombre de paquets qui ne sont pas fournis avec Anaconda. Auparavant, j'avais déjà installé certains d'entre eux à l'aide de pip. J'avais donc pip uninstall PACKAGE avant d'installer PACKAGE avec conda. Avec conda, je peux maintenant gérer (presque) tous mes paquets avec une seule approche plutôt que d’avoir un mélange de choses installées avec conda, pip, easy_install et python setup.py install.

Pour le contexte, je pense que ceci article de blog récent par @Travis Oliphant sera utile pour les gens comme moi qui n'apprécient pas tout ce qui est contenu dans un emballage robuste Python, mais qui apprécie certainement quand ça " fonctionne juste ". conda semble être un bon moyen d'avancer ...

16
Josh Hemann

C'est pourquoi j'ai écrit Picky: http://picky.readthedocs.io/

C'est un paquetage python qui suit les paquets installés avec pip ou conda dans virtualenvs et conda envs.

10
Chris Withers

Je pense que ce qui manque ici, c'est que lorsque vous le faites:

>pip install .

pour installer un paquet local avec setup.py, il installe un paquet visible par tous les envs conda qui utilisent la même version de python. Notez que j'utilise la version conda de pip!

par exemple, si j'utilise python2.7, le paquet local est placé ici:

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

Si je crée ensuite un nouveau conda env avec python = 2.7 (= par défaut):

>conda create --name new

>source activate new

Et ensuite faire:

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

Cependant, si je le fais:

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

Ainsi, dans ce cas, conda ne connaît pas le paquet pip, mais le paquet est disponible pour python.

Cependant, si j'installe plutôt le paquet local (encore une fois en utilisant pip) après j'ai créé (et activé) le nouveau conda env, maintenant conda le voit:

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

Je pense donc que l’interaction entre conda et pip pose certains problèmes - c’est-à-dire que l’utilisation de pip pour installer un paquet local à partir d’un conda env rend ce paquet disponible (mais non visible via conda list) à tous les autres envois de conda du même python version.

3
M.H.

conda env export répertorie tous les packages conda et pip dans un environnement. conda-env doit être installé dans le répertoire racine (conda install -c conda conda-env).

Pour écrire un fichier environment.yml décrivant l'environnement actuel:

conda env export > environment.yml

Références:

2
Wes Turner

Je préfixe généralement le dossier 'bin/pip' pour l'environnement spécifique dans lequel vous souhaitez installer le paquet avant la commande 'pip'. Par exemple, si vous souhaitez installer pymc3 dans l’environnement py34, vous devez utiliser cette commande:

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

En gros, vous devez simplement trouver le bon chemin vers le dossier 'bin/pip' de votre environnement et le placer avant la commande d'installation.

2
Gianluca

Vous pouvez commencer par installer la commande donnée ci-dessous dans l'environnement conda:

conda install pip

Suivi de l'installation de tous les packages pip dont vous avez besoin dans l'environnement.

Après avoir installé tous les packages conda et pip pour exporter l'environnement, utilisez:

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

Cela créera le fichier requis dans le dossier.

1
Kavish

Mon which pip montre le chemin suivant:

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

Ainsi, quel que soit le paquet que j'installe avec pip install <package-name>, il devra être reflété dans la liste des paquetages lorsque celle-ci sera exportée en utilisant:

$ conda list --export > conda_list.txt

Mais je ne le fais pas. Donc, au lieu de cela, j'ai utilisé la commande suivante comme suggéré par plusieurs autres:

# 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'

Maintenant, je peux voir tous les paquets dans mon fichier all-packages.yml.

0
kmario23