我想在我的 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
更新了环境:
$ conda env update -n myenv -f environment.yaml
...
plink-1.90b4-h 100% |#################| Time: 0:00:00 1.63 MB/
提取了特定(最新)版本“1.904b4-h”,但这似乎被截断并且不能准确反映 conda 包版本。我将如何使用 conda 期望的版本字符串更新环境?
我发现的一种方法是使用
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
}
]
您可以省略
--json
标志以获得更简单的输出,这对眼睛来说更容易,但可能需要 grep/awk'ing:
$ conda list -n genomics-py36 -f plink
# packages in environment at /home/foo/envs/myenv:
#
plink 1.90b4 h0a6d026_2 bioconda
注意:对于您的脚本:
conda list
始终以代码 0 退出,无论是否找到包。
然后您可以使用确切的版本修改environment.yaml文件:
# environment.yaml updated
channels:
...
dependencies:
...
- plink=1.90b4
...
我认为
conda list | grep xxx
会解决你的问题。
鉴于: 我们需要检查 PyTorch 版本:
conda list | grep PyTorch
# Return
pytorch 1.10.0 py3.8_cuda11.3_cudnn8.2.0_0 pytorch
pytorch-mutex 1.0 cuda pytorch
torchaudio 0.10.0 py38_cu113 pytorch
torchvision 0.11.1 py38_cu113 pytorch
请注意,
conda list
,就像grep
一样,对包名称使用子字符串搜索。因此,如果您想确保获得完全匹配的包名称的版本,那么您需要获取 JSON 格式的 conda list
结果并使用 jq
解析它们,例如因此 - 对于 pandas
:
$ conda list pandas --json | jq -r '.[] | select(.name=="pandas") | .version'
1.5.3
...在有 3 个软件包(随 pip 安装,默认情况下也包括
conda list
)的环境中,其名称中包含“pandas”子字符串:
$ conda list pandas
# Name Version Build Channel
geopandas 0.14.0 pypi_0 pypi
pandas 1.5.3 pypi_0 pypi
pandas-profiling 3.6.6 pypi_0 pypi
如果只有conda环境的路径可用,则使用:
conda list -p /path/to/conda/env
例如:
conda list -p /mnt/home/foo/.conda/envs/env-1a84d20bd797f04a477f57f9157048ae
或者对于特定的包,例如
pandas
,添加grep
,如下所示:
conda list -p /mnt/home/foo/.conda/envs/env-1a84d20bd797f04a477f57f9157048ae | grep pandas
输出示例:
pandas 2.2.3 py313ha87cce1_1 conda-forge