如何识别conda包依赖者?

Yan*_*ann 17 conda

对于给定的conda包,如何列出依赖它的包?

我最近在一个已经有MPI版本(openmpi)的大学集群上安装了anaconda.安装了anaconda 的mpich2软件包和mpi4py软件包适用于mpi4py的演示,但mpi*编译器(mpicc等)不兼容.所以我conda remove倒是mpich2mpi4py和用于pip安装mpi4py使用本地MPI安装和编译器.

我不得不四处寻找mpi4py依赖,然后mpich2依赖我,我只是确定了mpi4py.是否有"简单"的方法来找出取决于mpich2什么?

Yan*_*ann 27

conda info会告诉你你所在的目录(或目录)package cache.这些目录包含每个包的唯一目录,每个包目录包含一个info目录和一个名为的文件index.json.requires每个文件中都有一个字段引用conda依赖项列表.简而言之,您需要在这些文件中搜索您要删除的包.

例如,如果anaconda安装在我的主目录中,因此包缓存是~/anaconda/pkgs,为了找到mpich2家属,我会:

grep mpich2 ~/anaconda/pkgs/*/info/index.json
Run Code Online (Sandbox Code Playgroud)

您将看到anaconda包的2行,因为mpich2它们都在上述requires列表和名为的列表中depends.您还会看到每个mpich2可用包的一行,因为每个包还有一个name字段.然后,您将看到每个包依赖的一行或多行,需要 mpich2.我的搜索仅生成mpi4py.

现在我认为你可以--dry-run删除,但似乎remove不会删除dependents,所以没有列出任何特殊内容.

如果grep不可用,那么我相信你可以制作一个python脚本来做同样的事情,使用说glob模块甚至json可能进行搜索.


Rol*_*ber 14

使用最新版本的 conda,您可以执行以下操作

conda remove --dry-run <package>
Run Code Online (Sandbox Code Playgroud)

获取将与给定的软件包一起卸载的软件包列表。


sta*_*son 10

conda search --reverse-dependency <package>
Run Code Online (Sandbox Code Playgroud)

应该是答案。除非它不起作用。请对此问题进行投票,以表明它对用户很重要。据报道,1月18日,状态没有变化。希望能收集到足够的选票。也许有人可以提交PR进行修复。

在此之前,如果pip的反向依赖包版本与conda的版本相同,则通常可能不是pipdeptree的部分解决方案。但至少它会给您一些指示。

pipdeptree --reverse --packages <package>
Run Code Online (Sandbox Code Playgroud)


mer*_*erv 9

mamba repoquery

\n

虽然Mamba主要是 Conda 的直接替代品,但它提供的额外功能之一是通过其repoquery命令进行依赖项和反向依赖项查询的可靠功能. However, note that this is only for environment-level relationships, so the packages must be installed and the environment activated.

\n

演示

\n

请注意,这距离最初的问题已经过去了好几年,所以我只是进行mpi4py安装演示并使用安装的版本。

\n
$ mamba create -n so-mpi4py mpi4py\n## installs 24 packages\n\n$ conda activate so-mpi4py\n(so-mpi4py) $ mamba repoquery whoneeds mpich\n                  __    __    __    __\n                 /  \\  /  \\  /  \\  /  \\\n                /    \\/    \\/    \\/    \\\n\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88/  /\xe2\x96\x88\xe2\x96\x88/  /\xe2\x96\x88\xe2\x96\x88/  /\xe2\x96\x88\xe2\x96\x88/  /\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\n              /  / \\   / \\   / \\   / \\  \\____\n             /  /   \\_/   \\_/   \\_/   \\    o \\__,\n            / _/                       \\_____/  `\n            |/\n        \xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x95\x97   \xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x95\x97 \xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x95\x97 \xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x95\x97   \xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x95\x97\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x95\x97  \xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x95\x97\n        \xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x95\x97 \xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x95\x91\xe2\x96\x88\xe2\x96\x88\xe2\x95\x94\xe2\x95\x90\xe2\x95\x90\xe2\x96\x88\xe2\x96\x88\xe2\x95\x97\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x95\x97 \xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x95\x91\xe2\x96\x88\xe2\x96\x88\xe2\x95\x94\xe2\x95\x90\xe2\x95\x90\xe2\x96\x88\xe2\x96\x88\xe2\x95\x97\xe2\x96\x88\xe2\x96\x88\xe2\x95\x94\xe2\x95\x90\xe2\x95\x90\xe2\x96\x88\xe2\x96\x88\xe2\x95\x97\n        \xe2\x96\x88\xe2\x96\x88\xe2\x95\x94\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x95\x94\xe2\x96\x88\xe2\x96\x88\xe2\x95\x91\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x95\x91\xe2\x96\x88\xe2\x96\x88\xe2\x95\x94\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x95\x94\xe2\x96\x88\xe2\x96\x88\xe2\x95\x91\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x95\x94\xe2\x95\x9d\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x95\x91\n        \xe2\x96\x88\xe2\x96\x88\xe2\x95\x91\xe2\x95\x9a\xe2\x96\x88\xe2\x96\x88\xe2\x95\x94\xe2\x95\x9d\xe2\x96\x88\xe2\x96\x88\xe2\x95\x91\xe2\x96\x88\xe2\x96\x88\xe2\x95\x94\xe2\x95\x90\xe2\x95\x90\xe2\x96\x88\xe2\x96\x88\xe2\x95\x91\xe2\x96\x88\xe2\x96\x88\xe2\x95\x91\xe2\x95\x9a\xe2\x96\x88\xe2\x96\x88\xe2\x95\x94\xe2\x95\x9d\xe2\x96\x88\xe2\x96\x88\xe2\x95\x91\xe2\x96\x88\xe2\x96\x88\xe2\x95\x94\xe2\x95\x90\xe2\x95\x90\xe2\x96\x88\xe2\x96\x88\xe2\x95\x97\xe2\x96\x88\xe2\x96\x88\xe2\x95\x94\xe2\x95\x90\xe2\x95\x90\xe2\x96\x88\xe2\x96\x88\xe2\x95\x91\n        \xe2\x96\x88\xe2\x96\x88\xe2\x95\x91 \xe2\x95\x9a\xe2\x95\x90\xe2\x95\x9d \xe2\x96\x88\xe2\x96\x88\xe2\x95\x91\xe2\x96\x88\xe2\x96\x88\xe2\x95\x91  \xe2\x96\x88\xe2\x96\x88\xe2\x95\x91\xe2\x96\x88\xe2\x96\x88\xe2\x95\x91 \xe2\x95\x9a\xe2\x95\x90\xe2\x95\x9d \xe2\x96\x88\xe2\x96\x88\xe2\x95\x91\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x95\x94\xe2\x95\x9d\xe2\x96\x88\xe2\x96\x88\xe2\x95\x91  \xe2\x96\x88\xe2\x96\x88\xe2\x95\x91\n        \xe2\x95\x9a\xe2\x95\x90\xe2\x95\x9d     \xe2\x95\x9a\xe2\x95\x90\xe2\x95\x9d\xe2\x95\x9a\xe2\x95\x90\xe2\x95\x9d  \xe2\x95\x9a\xe2\x95\x90\xe2\x95\x9d\xe2\x95\x9a\xe2\x95\x90\xe2\x95\x9d     \xe2\x95\x9a\xe2\x95\x90\xe2\x95\x9d\xe2\x95\x9a\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x9d \xe2\x95\x9a\xe2\x95\x90\xe2\x95\x9d  \xe2\x95\x9a\xe2\x95\x90\xe2\x95\x9d\n\n        mamba (0.19.0) supported by @QuantStack\n\n        GitHub:  https://github.com/mamba-org/mamba\n        Twitter: https://twitter.com/QuantStack\n\n\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\n\n\nExecuting the query mpich\n\n\n\n Name   Version Build           Depends              Channel           \n\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n mpi4py 3.1.3   py310hd348148_0 mpich >=3.4,<4.0.0a0 conda-forge/osx-64\n
Run Code Online (Sandbox Code Playgroud)\n

就我个人而言,我通常使用树格式,

\n
(so-mpi4py) $ mamba repoquery whoneeds --tree mpich\n\nmpich[3.4.2]\n  \xe2\x94\x94\xe2\x94\x80 mpi4py[3.1.3]\n
Run Code Online (Sandbox Code Playgroud)\n

现实世界的例子

\n

更多地证明了它的实用性,我注意到在某个时候我的一个 R 环境不知何故最终安装了 Python。我对此非常严格,所以我伸手去寻找mamba repoquery whoneeds并发现:

\n
(bioc_3_12) host:dir usr$ mamba repoquery whoneeds -t python\n\nExecuting the query python\n\npython[3.9.2]\n  \xe2\x94\x9c\xe2\x94\x80 numpy[1.20.2]\n  \xe2\x94\x82  \xe2\x94\x94\xe2\x94\x80 colormath[3.0.0]\n  \xe2\x94\x82     \xe2\x94\x94\xe2\x94\x80 spectra[0.0.11]\n  \xe2\x94\x82        \xe2\x94\x94\xe2\x94\x80 r-rspectra[0.16_0]     # <- this package is the culprit!\n  \xe2\x94\x82           \xe2\x94\x94\xe2\x94\x80 r-uwot[0.1.10]\n  \xe2\x94\x9c\xe2\x94\x80 networkx[2.5]\n  \xe2\x94\x82  \xe2\x94\x94\xe2\x94\x80 colormath already visited\n  \xe2\x94\x9c\xe2\x94\x80 certifi[2021.5.30]\n  \xe2\x94\x82  \xe2\x94\x94\xe2\x94\x80 setuptools[49.6.0]\n  \xe2\x94\x82     \xe2\x94\x9c\xe2\x94\x80 networkx already visited\n  \xe2\x94\x82     \xe2\x94\x94\xe2\x94\x80 pip[21.0.1]\n  \xe2\x94\x9c\xe2\x94\x80 python_abi[3.9]\n  \xe2\x94\x82  \xe2\x94\x9c\xe2\x94\x80 numpy already visited\n  \xe2\x94\x82  \xe2\x94\x9c\xe2\x94\x80 certifi already visited\n  \xe2\x94\x82  \xe2\x94\x94\xe2\x94\x80 setuptools already visited\n  \xe2\x94\x9c\xe2\x94\x80 colormath already visited\n  \xe2\x94\x9c\xe2\x94\x80 spectra already visited\n  \xe2\x94\x9c\xe2\x94\x80 decorator[4.4.2]\n  \xe2\x94\x82  \xe2\x94\x94\xe2\x94\x80 networkx already visited\n  \xe2\x94\x9c\xe2\x94\x80 wheel[0.36.2]\n  \xe2\x94\x82  \xe2\x94\x94\xe2\x94\x80 pip already visited\n  \xe2\x94\x9c\xe2\x94\x80 pip already visited\n  \xe2\x94\x94\xe2\x94\x80 setuptools already visited\n
Run Code Online (Sandbox Code Playgroud)\n

事实证明,r-spectraConda Forge 中的包配方错误地将其依赖项之一表述为 Python 包 ( spectra),而不是 C++ 动态库 ( spectralib)。

\n


asm*_*rer 7

搜索包缓存只会显示已经下载的包.对于您的情况,这种行为很好,但如果您想知道依赖于给定包的每个包,更好的方法是搜索您的频道的重新发送数据.重新加载缓存~/anaconda/pkgs/cache,或者您可以使用浏览器导航到http://repo.continuum.io/pkgs/free/并单击repodata.json您使用的平台(对于Binstar,转到,例如,https:// conda .binstar.org/asmeurer).然后在"depends"键中搜索包的名称.

  • 很高兴能够在线轻松访问这些信息. (2认同)

Haw*_*ker 7

有一个 conda 包:conda-tree文档

\n

要查找依赖于某个包的包:

\n
# which packages depend on a specific package\n$ conda-tree whoneeds xz\n[\'samtools\', \'bcftools\', \'htslib\', \'python\']\n
Run Code Online (Sandbox Code Playgroud)\n

您还可以转储整个依赖关系树,然后搜索:

\n
# full dependency tree\n$ conda-tree deptree --full\nneovim==0.3.1\n  \xe2\x94\x9c\xe2\x94\x80 pynvim 0.3.2 [required: any]\n  \xe2\x94\x82  \xe2\x94\x9c\xe2\x94\x80 greenlet 0.4.15 [required: any]\n...\n
Run Code Online (Sandbox Code Playgroud)\n