2014-09-29 14 views
8

Für ein gegebenes conda Paket, wie listet ich die Pakete auf, die davon abhängen?Wie identifiziert man die Abhängigkeiten von Conda-Paketen?

Ich habe kürzlich Anaconda auf einem Universitätscluster installiert, der bereits eine Version von MPI (openmpi) hatte. Die Pakete mpich2 und mpi4py, die mit Anaconda installiert wurden, waren für Demos von mpi4py in Ordnung, aber die mpi* Compiler (MPICC, usw.) waren nicht kompatibel. So habe ich conda remove 'd mpich2 und mpi4py und verwendet pipmpi4py mit der lokalen MPI-Installation und Compiler zu installieren.

Ich musste herum graben, um mpi4py 's Abhängigkeiten und dann mpich2' s Abhängige zu finden, für die ich nur mpi4py identifiziert. Gibt es einen "einfachen" Weg, um herauszufinden, was von mpich2 abhängt?

+0

Parsing Ihre Geschichte über MPI notwendig, um Ihre Frage zu verstehen, oder deckt Ihr Eröffnungssatz es? – duozmo

+3

@duozmo Ich nehme an, dass die Eröffnungsstatements es abdecken, aber ich gebe meine Fragen in der Regel gerne an, falls ich nicht die richtige Frage stelle. – Yann

+0

Keine Einwände gegen die Bereitstellung von Kontext.Es ist nur ein ziemlich kompliziertes Szenario und ich habe viel Zeit damit verbracht, herauszufinden, ob wir die gleiche Frage hatten (dein Eröffnungssatz). – duozmo

Antwort

5

Beim Durchsuchen des Paketcaches werden nur die Pakete angezeigt, die Sie bereits heruntergeladen haben. Für Ihren Fall ist dieses Verhalten in Ordnung, aber wenn Sie jedes Paket kennen möchten, das von einem bestimmten Paket abhängt, können Sie die Repodaten Ihrer Kanäle besser durchsuchen. Die Repodaten werden in ~/anaconda/pkgs/cache zwischengespeichert, oder Sie können mit Ihrem Browser zu http://repo.continuum.io/pkgs/free/ navigieren und auf repodata.json für die Plattform klicken, die Sie verwenden (für Binstar, gehen Sie zu z. B. https://conda.binstar.org/asmeurer). Dann suchen Sie den Namen des Pakets in der "hängt" -Taste.

+1

Wäre schön, diese Informationen online leicht zugänglich zu haben. – astrojuanlu

16

conda info wird Ihnen das Verzeichnis (oder die Verzeichnisse) mitteilen, in dem sich Ihr package cache befindet. Diese Verzeichnisse enthalten ein eindeutiges Verzeichnis für jedes Paket, und jedes Paketverzeichnis enthält ein Verzeichnis info und eine Datei mit der Bezeichnung index.json. In jeder dieser Dateien befindet sich ein requires Feld, das auf eine Liste von conda Abhängigkeiten verweist. Kurz gesagt, müssen Sie diese Dateien nach dem Paket durchsuchen, das Sie entfernen möchten.

Zum Beispiel, wenn anaconda 's in meinem Home-Verzeichnis installiert ist, und daher ist die Paket-Cache ist ~/anaconda/pkgs, mpich2 zu finden' s Angehörigen, ich würde:

grep mpich2 ~/anaconda/pkgs/*/info/index.json 

Sie 2 Linien für die anaconda sehen Paket, weil mpich2 sowohl in der oben genannten requires Liste und in einer Liste depends genannt wird. Sie sehen auch eine Zeile für jedes verfügbare mpich2-Paket, da für jedes Paket auch ein name-Feld vorhanden ist. Dann sehen Sie eine oder mehrere Zeilen für jedes Paket, das davon abhängig ist, erfordert mpich2. Meine Suche ergab nur mpi4py.

Jetzt dachte ich, Sie könnten eine --dry-run entfernen, aber es scheint, dass remove nicht Abhängige entfernt, so nichts besonderes aufgeführt ist.

Wenn grep nicht verfügbar ist, dann bin ich mir sicher, dass Sie ein Python-Skript machen könnten, das gleiche zu tun, indem Sie das glob Modul und vielleicht sogar json verwenden, um die Suche durchzuführen.