Python 如何在conda中约束包版本?

Python 如何在conda中约束包版本?,python,anaconda,conda,Python,Anaconda,Conda,我在conda环境中工作,预装了很多包(conda list有360个包,很多ML工具和一些bioconda)。我有时需要添加一个包;然而,我发现conda install newpackage通常非常慢(在“解决环境”上花费数小时或数天),如果它完成了,它通常会建议对我不想接触的包进行更新 我想固定一些核心包(python、numpy、scipy等)的当前版本,这样conda甚至认为修改它们是不可能的。这既是为了提高速度,也是为了避免任何无意的更新。如果这意味着我想尝试添加的某个包无法安装,那

我在conda环境中工作,预装了很多包(conda list有360个包,很多ML工具和一些bioconda)。我有时需要添加一个包;然而,我发现
conda install newpackage
通常非常慢(在“解决环境”上花费数小时或数天),如果它完成了,它通常会建议对我不想接触的包进行更新

我想固定一些核心包(python、numpy、scipy等)的当前版本,这样conda甚至认为修改它们是不可能的。这既是为了提高速度,也是为了避免任何无意的更新。如果这意味着我想尝试添加的某个包无法安装,那没关系!我宁愿有一个像“newpackage与您的numpy版本冲突”这样的快速答案,也不愿没有答案。然后我可以决定是否要忽略冲突;为这一个包创建一个简单的环境;conda本地构建,或者其他什么

我该怎么做

另请参见:(这并没有解决问题)

包固定 包可以按环境固定到特定版本。看见例如,假设我们想要将
numpy
scipy
锁定到我们当前在名为
foo
的环境中的确切版本。我们可以处理
conda list
的输出,以匹配conda钉扎规范的预期语法:

conda激活foo
康达列表“^(numpy | scipy)$”| tail-n+4 | awk'{print$1”==“$2}”>$conda_前缀/conda元/固定
这里有几点需要注意:

  • conda list
    使用正则表达式:充分利用它
  • tail
    只是跳过标题
  • 这取决于是否在激活的环境中定义
    $CONDA_前缀
  • 这将覆盖任何现有的
    固定的
    文件
冻结安装
保持一切不变的一种劳动强度较小的方法是使用
--freeze installed
标志。但是,在较新版本的Conda中,默认情况下在第一轮求解中使用此选项。因此,实际上,该标志现在所做的只是跳过第二轮解决,这允许更新不属于明确规范一部分的包。

conda install newpackage通常非常慢(在“解决环境”中花费数小时或数天),如果完成,它经常建议更新我不想接触的软件包。
-您尝试过吗?它是conda的替代品,而且速度非常非常快。您的所有项目都使用单一环境吗?为了获得最佳性能和稳定性,请尝试从environment.yml文件构建env。@AMC我正在使用随环境提供的Amazon AMIs;许多软件包似乎都是定制的(并且不完全确定它们来自哪里)。当然,我总是可以通过从AMI创建一个新实例来获得一个新副本,但不一定要从environment.yml创建一个env