【问题标题】:Separately solve and then later install Conda environment单独解决后再安装Conda环境
【发布时间】:2020-08-10 19:28:38
【问题描述】:

我正在执行一项任务,该任务涉及分析 bioconda 中每个软件包的最新版本。这不能使用一个大型环境来完成,因为解决这样一个大型环境的依赖关系需要几天时间,甚至可能无法保证每个包的最新版本。出于这个原因,我尝试将每个包分别安装在其自己的 conda 环境中。

为了加快速度,我试图尽可能多地并行化。现在我知道 package installations can't be run concurrently 在 conda 中,因为每个进程都需要对包缓存的写权限。但是,在我看来,创建然后解决环境可以同时运行,我只需要串行安装包。

现在,我可以通过在每个进程中运行 conda install my_package --json --dry-run > plan.json 来并行运行求解,这会输出一个很好的 JSON 文件,描述每个环境的求解。如果我有这个输出,我怎么能告诉 conda“使用这个已经解决的执行计划安装包”?我在设想conda install --plan plan.json 之类的东西,但这样的标志并不存在。

如何分离conda环境的解决和安装?或者也许还有另一种方式以不同的方式安装大量 conda 环境?

【问题讨论】:

  • 这读起来像XY problem
  • 我还解释了更广泛的问题:同时创建大量 conda 环境并将软件包安装到其中。如果有人有绕过我当前解决方案的新颖解决方案,他们可以免费提供。如果我不解释我当前的解决方案,我会忽略第 2 步:“描述你尝试过的方法”。
  • 但是你为什么要同时安装 conda 环境呢?现有的安装是否相同?你怎么知道的?
  • 并发不是问题的核心。核心问题是“快速制作大量环境”。只是并发似乎是这个问题的自然解决方案。但是,是的,我可以让我的问题更清楚。
  • 我认为没有针对您的具体问题的解决方案,但我同意@PeterWood 的观点,即您的根本问题可能有解决方案,这在问题中仍然很模糊。我认为申请Five whys 可以帮助我们提供更好的帮助。这太模糊了:我正在处理一项涉及分析 bioconda 中每个软件包的最新版本的任务。

标签: python anaconda conda


【解决方案1】:

至少从 4.6 版开始,Conda 已经公开了 beta API to the Solver class。事实证明,这可以让你做我需要的。它仍处于测试阶段,因此免责声明可能会在未来的 conda 版本中中断,您目前可以在 Conda 4.8.x 中执行此操作:

from conda.api import Solver

# Solve the environment, which can be done concurrently
solver = Solver(
    dir, # The location of the conda environment
    ["bioconda", "conda-forge"], # A list of conda channels to use
    specs_to_add=["bwa=0.7.17"], # A list of packages to install
)
transaction = solver.solve_for_transaction()

# This part must be done serially, so use a multiprocessing.Lock here
with lock:
    transaction.download_and_extract()
    transaction.execute()

【讨论】:

  • 是的,这与我的建议一致,即,如果您要以编程方式解决一堆问题,那么最好直接使用 Python 包,即使它使用的是 Conda内部结构。
猜你喜欢
  • 2019-03-14
  • 2019-04-14
  • 1970-01-01
  • 2022-01-02
  • 2019-01-04
  • 2021-06-22
  • 2021-07-26
  • 1970-01-01
  • 2023-03-21
相关资源
最近更新 更多