conda:列出使用特定软件包的所有环境

hgqdbh6s  于 2021-08-25  发布在  Java
关注(0)|答案(2)|浏览(438)

如何获得在conda中使用某个包的所有环境的列表?

vzgqcmou

vzgqcmou1#

下面是一个如何使用conda python包(在基本环境中运行此程序)执行此操作的示例:

  1. import conda.gateways.logging
  2. from conda.core.envs_manager import list_all_known_prefixes
  3. from conda.cli.main_list import list_packages
  4. from conda.common.compat import text_type
  5. # package to search for; this can be a regex
  6. PKG_REGEX = "pymc3"
  7. for prefix in list_all_known_prefixes():
  8. exitcode, output = list_packages(prefix, PKG_REGEX)
  9. # only print envs with results
  10. if exitcode == 0 and len(output) > 3:
  11. print('\n'.join(map(text_type, output)))

从conda v4.10.0开始,它就可以工作,但由于它依赖于内部方法,因此无法保证继续工作。也许这应该是一个功能请求,比如对于像这样的cli命令 conda list --any .

脚本版本

以下是使用包名称参数的版本:
conda-list-any.py

  1. # !/usr/bin/env conda run -n base --no-capture-output python
  2. ## Usage: conda-list-any.py [PACKAGE ...]
  3. ## Example: conda-list-any.py numpy pandas
  4. import conda.gateways.logging
  5. from conda.core.envs_manager import list_all_known_prefixes
  6. from conda.cli.main_list import list_packages
  7. from conda.common.compat import text_type
  8. import sys
  9. for pkg in sys.argv[1:]:
  10. print("#"*80)
  11. print("# Checking for package '%s'..." % pkg)
  12. n = 0
  13. for prefix in list_all_known_prefixes():
  14. exitcode, output = list_packages(prefix, pkg)
  15. if exitcode == 0 and len(output) > 3:
  16. n += 1
  17. print("\n" + "\n".join(map(text_type, output)))
  18. print("\n# Found %d environment%s with '%s'." % (n, "" if n == 1 else "s", pkg))
  19. print("#"*80 + "\n")

顶部的shebang应该确保它将在base中运行,至少在unix/linux系统上运行。

展开查看全部
uujelgoq

uujelgoq2#

我也遇到了同样的问题,并构建了一个powershell脚本:
将正则表达式查询作为参数
浏览所有可用的conda环境(并在执行此操作时显示进度条)
列出每个环境中的所有包
返回包含与查询匹配的包的环境
按返回的环境显示与查询匹配的包名称
该脚本位于此答案的底部。我已将其保存在一个文件夹中,该文件夹在路径中的名称下可用 search-pkg-env.ps1 .
脚本可以按如下方式运行(在这里,我搜索具有 pip 包裹 pymupdf ):

  1. PS > search-pkg-env.ps1 pymupdf
  2. Searching 19 conda environments...
  3. py39
  4. - pymupdf 1.18.13

剧本

  1. if ($args.Length -eq 0) {
  2. Write-Host "Please specify a search term for that matches the package name (regex)." -BackgroundColor DarkYellow -ForegroundColor White
  3. exit
  4. }
  5. $pkg_regex = $args[0]
  6. $conda_envs = ConvertFrom-JSON -InputObject $([string]$(conda env list --json))
  7. $total = $conda_envs.envs.Count
  8. Write-Host "Searching $total conda environments..."
  9. $counter = 1
  10. ForEach ($conda_env in $conda_envs.envs) {
  11. if ($total -gt 0) {
  12. $progress = $counter / $total * 100
  13. }
  14. else {
  15. $progress = 0
  16. }
  17. # Split the full path into its elements
  18. $parts = $conda_env -Split '\\'
  19. # The last element has the env name
  20. $env_name = $parts[-1]
  21. Write-Progress -Activity "Searching conda environment $env_name for $pkg_regex" -PercentComplete $progress
  22. # Now search the provided package name in this environment
  23. $search_results = ConvertFrom-JSON -InputObject $([string]$(conda list $pkg_regex -n $env_name --json))
  24. If ($search_results.Count -gt 0) {
  25. Write-Host $env_name
  26. foreach ($result in $search_results) {
  27. $pkg_name = $result.name
  28. $pkg_version = $result.version
  29. Write-Host " - $pkg_name $pkg_version"
  30. }
  31. }
  32. $counter++
  33. }
展开查看全部

相关问题