158 votes

Comment puis-je garder la trace des paquets installés par pip dans un environnement Anaconda (Conda) ?

J'ai installé et utilisé le Anaconda Python, et j'ai commencé à utiliser l'environnement Anaconda (Conda). Je peux utiliser la version standard conda install... pour mettre les paquets de la distribution dans mes environnements, mais pour utiliser tout ce qui n'est pas de la distribution (c'est-à-dire Flask-WTF, flask-sqlalchemy et alembic), je dois utiliser la commande pip install dans l'environnement actif. Cependant, lorsque je regarde le contenu de l'environnement, soit dans le répertoire, soit en utilisant la commande conda list ces pip install Les paquets édités n'apparaissent pas.

Utilisation de pip freeze y pip list liste juste tous les paquets que j'ai installés.

Y a-t-il un moyen de garder une trace de ce qui est dans chacun de mes Anaconda env (les deux pip y conda installé) ?

141voto

conner.xyz Points 2344

conda-env fait maintenant cela 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 à la fois 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 aller jusqu'au bout de l'exportation de l'environnement, déplacez environment.yml sur la nouvelle machine hôte et exécutez :

conda env create -f path/to/environment.yml

66voto

Viktor Kerkez Points 11222

conda ne gardera la trace que des paquets qu'il a installés. Et pip vous donnera les paquets qui ont été soit installés en utilisant la commande pip l'installateur lui-même ou ils ont utilisé setuptools dans leur setup.py donc conda build a généré les informations sur l'oeuf. Donc vous avez essentiellement trois options.

  1. Vous pouvez prendre l'union de la conda list y pip freeze et gérer les paquets qui ont été installés en utilisant conda (qui montrent dans le conda list ) avec le conda et ceux qui sont installés avec pip (qui montrent dans pip freeze mais pas dans conda list ) avec pip .

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

  3. Construisez votre propre conda et gérer le tout avec conda .

Je recommande personnellement la troisième option, car elle est très facile à construire. conda paquets. Il existe un dépôt git d'exemples de recettes sur le compte github du continuum. Mais cela se résume généralement à :

 conda skeleton pypi PACKAGE
 conda build PACKAGE

ou juste :

conda pipbuild PACKAGE

De même, lorsque vous les avez construits une fois, vous pouvez les télécharger vers https://binstar.org/ et l'installer à partir de là.

Ensuite, vous aurez tout géré en utilisant conda .

24voto

Travis Oliphant Points 749

Il y a une branche de conda (new-pypi-install) qui ajoute une meilleure intégration avec pip et PyPI. En particulier, conda list affichera aussi les paquets installés par pip et conda install essaiera d'abord de trouver un paquet conda et, en cas d'échec, utilisera pip pour installer le paquet.

Cette branche est prévue pour être fusionnée plus tard cette semaine afin que la version 2.1 de conda ait une meilleure intégration de pip avec conda.

17voto

Josh Hemann Points 380

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

conda skeleton pypi PACKAGE

conda build PACKAGE

Il semblerait que tout ait fonctionné mais je n'ai pas réussi à importer PACKAGE. Récemment, j'ai posé une question à ce sujet sur le forum Groupe d'utilisateurs d'Anaconda et entendu @Travis Oliphant lui-même sur la meilleure façon d'utiliser Conda pour construire et gérer les paquets qui ne sont pas livrés avec Anaconda. Vous pouvez lire ce fil de discussion ici mais je vais décrire l'approche ci-dessous pour espérer que les réponses à la question du PO soient plus complètes...

Exemple : Je vais installer l'excellent paquet prettyplotlib sur Windows en utilisant conda 2.2.5.

1a) conda build --build-recipe prettyplotlib

Vous verrez que les messages de construction semblent tous corrects jusqu'à la section finale TEST de la construction. J'ai vu cette erreur

Dossier " C:\Anaconda\conda -bld \test -tmp_dir \run_test.py ", ligne 23 import None SyntaxError : cannot assign to None TESTS FAILED : prettyplotlib-0.1.3-py27_0

1b) Allez dans /conda-recipes/prettyplotlib et éditez le fichier meta.yaml. Actuellement, les paquets configurés comme à l'étape 1a donnent des fichiers yaml qui ont une erreur dans le champ test section. Par exemple, voici ce que j'ai cherché prettyplotlib

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

Modifiez cette section pour enlever la ligne vide précédée par le - et aussi enlever la ligne redondante prettyplotlib. Au moment où j'écris ces lignes, j'ai constaté que je dois modifier la plupart des fichiers meta.yaml comme celui-ci pour les paquets externes que j'installe avec conda, ce qui signifie qu'il y a une ligne d'importation vide qui cause l'erreur ainsi qu'une importation redondante du paquetage donné.

1c) Relancez la commande à partir de 1a, qui devrait se terminer sans erreur cette fois-ci. A la fin de la construction, il vous sera demandé si vous voulez télécharger la construction sur binstar . J'ai entré Non et j'ai vu ce message :

Si vous voulez télécharger ce paquet sur binstar.org plus tard, tapez :

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

Ce fichier tar.bz2 est le build 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 réussi à utiliser conda pour installer un certain nombre de paquets qui ne sont pas fournis avec Anaconda. Auparavant, j'avais installé certains d'entre eux en utilisant pip, donc j'ai fait pip uninstall PACKAGE avant d'installer PACKAGE avec conda. En utilisant 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 article récent du blog par @Travis Oliphant sera utile pour les personnes qui, comme moi, n'apprécient pas tout ce qui entre dans un packaging Python robuste, mais apprécient certainement quand les choses "fonctionnent tout simplement". conda semble être une grande voie à suivre...

13voto

Chris Withers Points 321

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X