如何确定已安装的 conda 软件包的确切软件版本?

ini*_*_js 3 python conda

我想在我的 conda 环境文件中指定确切的版本。我通过在我的 environment.yaml 中添加一个未版本化的条目来安装可用的最新版本,然后是conda env update.

# environment.yaml
channels:
  - conda-forge
  - bioconda
  - r
  - defaults
dependencies:
  - gawk=4.2.1
  - plink # new package -- get the latest
Run Code Online (Sandbox Code Playgroud)

更新了环境:

$ conda env update -n myenv -f environment.yaml
...
plink-1.90b4-h 100% |#################| Time: 0:00:00   1.63 MB/
Run Code Online (Sandbox Code Playgroud)

一个特定的(最新)版本“1.904b4-h”被拉出,但这似乎被截断了,并不能准确反映 conda 包版本。我将如何使用 conda 期望的版本字符串更新环境?

ini*_*_js 7

我发现的一种方法是用于conda list生成环境中包含的所有包的列表(可以选择使用 过滤到特定包-f,在本例中为“plink”):

$ conda list -n myenv -f plink --json
[
  {
    "base_url": null, 
    "build_number": 2, 
    "build_string": "h0a6d026_2", 
    "channel": "bioconda", 
    "dist_name": "plink-1.90b4-h0a6d026_2", 
    "name": "plink", 
    "platform": null, 
    "version": "1.90b4", 
    "with_features_depends": null
  }
]
Run Code Online (Sandbox Code Playgroud)

您可以省略--json标志以获得更简单的输出,这在眼睛上更容易,但可能需要 grepping/awk'ing:

$ conda list -n genomics-py36 -f plink
# packages in environment at /home/foo/envs/myenv:
#
plink                     1.90b4               h0a6d026_2    bioconda
Run Code Online (Sandbox Code Playgroud)

注意:对于您的脚本:conda list无论是否找到包,始终以代码 0 退出。

然后您可以使用确切版本修改 environment.yaml 文件:

$ conda list -n myenv -f plink --json
[
  {
    "base_url": null, 
    "build_number": 2, 
    "build_string": "h0a6d026_2", 
    "channel": "bioconda", 
    "dist_name": "plink-1.90b4-h0a6d026_2", 
    "name": "plink", 
    "platform": null, 
    "version": "1.90b4", 
    "with_features_depends": null
  }
]
Run Code Online (Sandbox Code Playgroud)