我正在conda环境中工作,该环境中预先安装了一堆软件包(conda列表中包含360个软件包,许多ML工具和一些bioconda)。有时我需要添加一个包装;但是,我发现conda install newpackage
通常非常慢(在“解决环境”中花费数小时或数天),并且如果完成了,它通常建议更新我真的不想接触的软件包。
我想固定一些核心软件包(python,numpy,scipy等)的当前版本,以便conda甚至都无法修改它们。这既是为了提高速度,又是为了避免意外更新。如果那意味着我想尝试添加的某些软件包无法安装,那就可以了!我宁愿有一个快速的答案,例如“ newpackage与您的numpy版本冲突”,而不是没有答案。然后,我可以决定是否要忽略冲突;仅为此一个程序包创建一个简单的环境; conda在本地或其他任何地方构建。
我该怎么做?
另请参阅:https://www.anaconda.com/blog/understanding-and-improving-condas-performance(无法解决问题)
答案 0 :(得分:1)
可以根据环境将软件包固定到特定版本。参见the documentation on package pinning。例如,假设我们想将numpy
和scipy
固定到当前称为foo
的环境中的确切版本。我们可以处理conda list
的输出以匹配Conda固定规范的预期语法:
conda activate foo
conda list "^(numpy|scipy)$" | tail -n+4 | awk '{ print $1 " ==" $2 }' > $CONDA_PREFIX/conda-meta/pinned
这里要注意的几件事:
conda list
使用正则表达式:利用它来发挥优势tail
只是跳过标题$CONDA_PREFIX
pinned
文件使所有事物保持不变的劳动强度较低的方法是使用--freeze-installed
标志。但是,在最新版本的Conda中,默认情况下在第一轮求解中使用此功能。因此,实际上,此标志现在所做的全部工作就是跳过第二轮求解,从而允许更新不属于显式规范的软件包。