Comment puis-je suivre les packages installés par pip dans un environnement Anaconda (Conda)?

141

J'ai installé et utilisé la distribution Anaconda Python, et j'ai commencé à utiliser l'environnement Anaconda (Conda). Je peux utiliser la conda install...commande standard pour mettre des paquets de la distribution dans mes environnements, mais pour utiliser quoi que ce soit à l'extérieur (c'est-à-dire Flask-WTF, flask-sqlalchemy et alambic), je dois utiliser pip installdans l'environnement actif. Cependant, lorsque je regarde le contenu de l'environnement, soit dans le répertoire, soit en utilisant conda listces pip installpackages ed n'apparaissent pas.

Utiliser pip freezeet pip listrépertorie tous les packages que j'ai déjà installés.

Existe-t-il un moyen de garder une trace de ce que contient chacun de mes Anaconda env(à la fois pipet condainstallé)?

Gromiczek
la source
7
Utilisez pipinstallé avec conda, par exemple ~/anaconda/bin/pip. Utilisez-le pour installer des packages dans un condaenvironnement, ainsi que pour voir l'union des packages installés avec this pipet avec conda install.
osa
7
conda lista depuis un certain temps maintenant inclus des paquets python qui ont été installés par d'autres moyens (par exemple, pip, installation facile, directement avec python setup.py install, etc.)
kalefranz
1
Ne mettez pas à niveau votre pip ou cette exportation sera arrosée
Andrew Cassidy

Réponses:

120

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 migrer un environnement:

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

Le fichier listera à la fois les packages conda et les packages 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 poursuivre l'exportation de l'environnement, passez environment.ymlà la nouvelle machine hôte et exécutez:

conda env create -f path/to/environment.yml
conner.xyz
la source
64

condane gardera trace que des packages installés. Et pipvous donnera les paquets qui ont été soit installés en utilisant le programme d' pipinstallation lui-même, soit ils ont utilisé setuptoolsdans leur construction setup.pysi conda a généré les informations sur l'œuf. Vous avez donc essentiellement trois options.

  1. Vous pouvez prendre l'union des packages conda listet pip freezeet gérer les packages qui ont été installés en utilisant conda(qui apparaissent dans conda list) avec le condagestionnaire de packages et ceux qui sont installés avec pip(qui apparaissent dans pip freezemais pas dans conda list) avec pip.

  2. Installez dans votre environnement uniquement les packages python, pipet distributeet gérez tout avec pip. (Ce n'est pas si simple si vous êtes sous Windows ...)

  3. Créez vos propres condapackages et gérez tout avec conda.

Je recommanderais personnellement la troisième option car il est très facile de créer des condapackages. Il existe un référentiel 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 plus, lorsque vous les avez construits une fois, vous pouvez les télécharger sur https://binstar.org/ et simplement les installer à partir de là.

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

Viktor Kerkez
la source
3
J'ai juste essayé de ~/anaconda/bin/pip install memory-profileret conda install numba, et ils sont tous les deux affichés ~/anaconda/bin/pip freeze.
osa
2
"référentiel git d'exemples de recettes sur le compte github du continuum" Voulez-vous dire github.com/ContinuumIO/anaconda-recipes ? S'il vous plaît lier si vous le pouvez
endolith
Cependant, cela n'installe pas réellement le package afin que vous puissiez l'importer. Vous devez faire conda install C:\...PACKAGE-0.0.0-py27_0.tar.bz2comme décrit dans stackoverflow.com/a/20750388/125507
endolith
Je dirais d'abord toujours avoir conda install python=3.x.ydans votre environnement conda de sorte que les installations de pip ultérieures passent par le pip installé par conda.
Ustaman Sangat
24

Il existe une branche de conda (new-pypi-install) qui ajoute une meilleure intégration avec pip et PyPI. En particulier, la liste conda affichera également les packages installés par pip et l'installation de conda essaiera d'abord de trouver un package conda et en échouant, il utilisera pip pour installer le package.

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

Travis Oliphant
la source
2
Je tiens à souligner que cela fonctionne déjà dans conda 2.2.3 (et probablement avant cela). La façon dont cela fonctionne est que si vous essayez conda install packageet qu'il ne trouve pas de recette de conda, il essaie de l'installer via pip(et en garde la trace). Il suggère même utilement l'installation pipsinon dans votre environnement. Merci Travis pour tout votre travail!
jorgeca
5
Clarification, puisque j'ai mal lu cela plusieurs fois. @Travis signifie que je pense que si on s'exécute dans un conda, alors exécuter pip cherchera d'abord les packages conda? L'inverse n'est certainement pas vrai - l'installation de conda ne recherche pas les paquets pypi, pas même les éléments sur pypi.binstar.org. C'est à partir de conda 3.5.2.
AnneTheAgile
9
Cela a-t-il été supprimé? Si je lance, disons, conda install autopep8il me dit "Aucun paquet trouvé" et que je devrais rechercher anaconda.org manuellement.
endolith
@AnneTheAgile running pip...ne fonctionne pas non plus, il ne cherchera pas du tout le package conda.
Wang
16

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

PACKAGE conda squelette pypi

PACKAGE de construction conda

ressemblerait à tout a fonctionné mais je n'ai pas pu importer avec succès le PACKAGE. Récemment, j'ai posé des questions à ce sujet sur le groupe d'utilisateurs Anaconda et 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 vais décrire l'approche ci-dessous pour, espérons-le, rendre les réponses à la question du PO plus complètes ...

Exemple: je vais installer l'excellent package prettyplotlib sur Windows en utilisant conda 2.2.5.

1a) conda build --build-recipe prettyplotlib

Vous verrez que les messages de compilation semblent tous bons jusqu'à la dernière section TEST de la construction. J'ai vu cette erreur

Fichier "C: \ Anaconda \ conda-bld \ test-tmp_dir \ run_test.py", ligne 23 import Aucun SyntaxError: impossible d'attribuer à None TESTS FAILED: prettyplotlib-0.1.3-py27_0

1b) Allez dans / conda-recettes / prettyplotlib et éditez le fichier meta.yaml. Actuellement, les packages en cours de configuration comme à l'étape 1a entraînent des fichiers yaml contenant une erreur dans la testsection. Par exemple, voici comment le mien cherchaitprettyplotlib

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

Modifiez cette section pour supprimer la ligne vide précédée de - et supprimez également la ligne redondante prettyplotlib. Au moment d'écrire ces lignes, j'ai constaté que je devais éditer la plupart des fichiers meta.yaml comme celui-ci pour les packages externes que j'installe avec conda, ce qui signifie qu'il y a une ligne d'importation vide provoquant l'erreur avec une importation redondante du package donné .

1c) Relancez la commande à partir de 1a, qui devrait se terminer sans erreur cette fois. À la fin de la construction, on vous demandera si vous souhaitez télécharger la construction sur binstar . J'ai entré Non et j'ai vu ce message:

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

$ binstar télécharger 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 packages qui ne sont pas fournis avec Anaconda. Auparavant, j'avais installé certains d'entre eux en utilisant pip, donc je l'ai fait pip uninstall PACKAGEavant 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é avec conda, pip, easy_install et python setup.py install.

Pour le contexte, je pense que ce récent billet de blog par @Travis Oliphant sera utile pour les gens comme moi qui n'apprécient pas tout ce qui entre dans un emballage Python robuste mais apprécient certainement quand les choses "fonctionnent juste". conda semble être un excellent moyen d'avancer ...

Josh Hemann
la source
2
En utilisant la version 3.5.2 de conda, la commande $ conda build --build-recette XXX; Erreurs avec 'arguments non reconnus: --build-recette'. La réponse complète est; utilisation: conda-build [-h] [-c] [--no-binstar-upload] [--output] [-s] [-t] [--no-test] [-V] [-q] RECIPE_PATH [RECIPE_PATH ...] conda-build: erreur: arguments non reconnus: --build-recette
AnneTheAgile
10

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

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

Chris Withers
la source
3

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

>pip install .

pour installer un package local avec un setup.py, il installe un package qui est visible par tous les envs conda qui utilisent la même version de python. Remarque J'utilise la version conda de pip!

par exemple, si j'utilise python2.7, il place le package local ici:

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

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

>conda create --name new

>source activate new

Et puis faites:

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

Cependant, si je fais:

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

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

Cependant, si j'installe à la place le package local (à nouveau en utilisant pip) après avoir créé (et activé) le nouvel env conda, maintenant conda le voit:

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

Donc, je pense que l'interaction entre conda et pip a quelques problèmes - c'est-à-dire que l'utilisation de pip pour installer un package local à partir d'un env conda rend ce package disponible (mais non visible via la liste conda) à tous les autres envs conda de la même version python.

MH
la source
2

Je préfixe généralement le dossier 'bin / pip' pour l'environnement spécifique dans lequel vous souhaitez installer le package 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, il vous suffit de trouver le bon chemin vers le dossier 'bin / pip' de votre environnement et de le placer avant la commande d'installation.

Gianluca
la source
1

Mon which pipmontre le chemin suivant:

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

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

$ conda list --export > conda_list.txt

Mais je ne le fais pas. Donc, à la place, 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 packages de mon all-packages.ymlfichier.

kmario23
la source
1

Vous pouvez commencer par installer la commande 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

Kavish
la source