2014-09-29 31 views
8

對於給定的conda包,如何列出依賴它的包?如何識別conda軟件包依賴項?

我最近在已經擁有MPI版本(openmpi)的大學集羣上安裝了anaconda。安裝了anaconda的mpich2軟件包和mpi4py軟件包對於mpi4py的演示都很好,但mpi*編譯器(mpicc等)不兼容。所以我conda remove'd mpich2mpi4py和使用pip安裝mpi4py使用本地MPI安裝和編譯器。

我不得不四處尋找mpi4py的依賴關係,然後mpich2的家屬,爲此我只確定了mpi4py有沒有一種「簡單」的方法來找出什麼取決於mpich2

+0

解析你的MPI故事是理解你的問題所必需的,還是你的開頭句子覆蓋了它? – duozmo 2015-12-16 16:32:29

+3

@duozmo我想開幕聲明會涵蓋它,但我通常喜歡在我沒有問正確的問題的情況下給出我的問題的背景。 – Yann 2015-12-16 18:49:52

+0

不反對提供上下文。這只是一個相當複雜的場景,我花了很多時間試圖弄清楚我們是否有同樣的問題(你的開頭句)。 – duozmo 2015-12-16 19:29:07

回答

5

搜索程序包緩存只會顯示已經下載的程序包。對於你的情況,這種行爲很好,但如果你想知道每個依賴於給定包的包,更好的方法是搜索你的頻道的重新數據。重新數據緩存在~/anaconda/pkgs/cache中,或者您可以使用瀏覽器導航至http://repo.continuum.io/pkgs/free/,並點擊repodata.json獲取您使用的平臺(對於Binstar,請轉至https://conda.binstar.org/asmeurer)。然後在「depends」鍵中搜索包的名稱。

+1

很高興有這個信息可以在線訪問。 – astrojuanlu 2016-01-08 07:46:20

16

conda info將告訴您package cache所在的目錄(或多個目錄)。這些目錄包含每個包的唯一目錄,每個包目錄包含一個info目錄和一個名爲index.json的文件。在這些文件中的每個文件中都有一個requires字段,它指向一個conda依賴關係列表。所以簡而言之,您需要搜索這些文件以找到您要刪除的軟件包。

例如,如果「安裝在我的主目錄S,因此,包緩存爲~/anaconda/pkgs,找到mpich2anaconda扶養,我想:

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

你會看到2號線的anaconda因爲mpich2既在前面提到的requires列表中,也在depends列表中。您還會看到每個mpich2包可用的一行,因爲每個包還有一個name字段。然後你會看到一個或多個依賴於每個包的行,需要mpich2。我的搜索只產生mpi4py

現在我以爲你可以做一個--dry-run刪除,但看起來remove不會刪除依賴項,所以沒有特別列出。

如果grep不可用,那麼我相信你可以使用python腳本來做同樣的事情,使用glob模塊,甚至可以使用json來執行搜索。

相關問題