单独解决,然后再安装Conda环境

时间:2020-04-27 09:22:17

标签: python anaconda conda

我正在执行一项任务,其中涉及分析bioconda中每个包装的最新版本。使用一个大型环境无法做到这一点,因为解决这种大型环境的依赖关系将花费数天,甚至可能无法保证每个软件包的最新版本。因此,我试图将每个软件包分别安装在自己的conda环境中。

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

现在,我可以通过在每个进程中运行conda install my_package --json --dry-run > plan.json来并行运行求解,该输出将输出一个描述每个环境的求解的漂亮JSON文件。如果我有此输出,如何告诉conda“使用已解决的执行计划安装软件包”?我正在设想类似conda install --plan plan.json之类的东西,但是这样的标记不存在。

如何分隔和安装conda环境?也许还有另一种方法可以以不同的方式安装大量的conda环境?

1 个答案:

答案 0 :(得分:2)

至少从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()