如何在GitHub Actions中激活conda环境?

Tim*_*and 9 environment installation conda samtools github-actions

我正在使用 GitHub Actions 设置持续集成。先决条件之一 ( samtools) 是最容易安装的conda。使用已安装软件包的标准方法是激活相应的conda环境。我正在寻找一种激活conda环境的方法。常见的激活方法均失败,详情见下文。我当前的解决方法是添加到由 . 安装的PATH硬编码路径。但如果安装的软件包数量增加,这是不可维护的。这也不是使用随.samtoolscondaconda

细节:

.github/workflows/conda.yml

name: Conda
on: [push]

jobs:
  # label of the job
  tests:
    name: Tests
    # containers must run in Linux based operating systems
    runs-on: ubuntu-latest
    # Docker Hub image that `postgres-job` executes in
    container: node:latest
    # service containers to run with `postgres-job`
    steps:
      - uses: conda-incubator/setup-miniconda@v2
        with:
          miniconda-version: "latest"
          channels: bioconda, conda-forge, defaults
          use-only-tar-bz2: true  # IMPORTANT: This needs to be set for caching to work properly!
          auto-update-conda: true
          auto-activate-base: true
      - name: Install samtools
        run: |
            set -x

            echo "begin: PATH=$PATH;"

            conda create -y --name samtools samtools

            conda activate samtools || true
            echo "after conda activate samtools: PATH=$PATH;"
            which samtools || true
              
            $CONDA/bin/activate samtools || true
            echo "after CONDA/bin/activate samtools: PATH=$PATH;"
            which samtools || true
              
            export PATH="3/envs/samtools/bin:$PATH"
            echo "after export PATH=3/envs/samtools/bin:PATH: PATH=$PATH;"
            which samtools || true
Run Code Online (Sandbox Code Playgroud)

输出:

Run set -x
begin: PATH=3/condabin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin;
+ echo begin: PATH=3/condabin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin;
+ conda create -y --name samtools samtools
Collecting package metadata (repodata.json): ...working... done
Solving environment: ...working... done
[...]

# To activate this environment, use
#
#     $ conda activate samtools
#
# To deactivate an active environment, use
#
#     $ conda deactivate
+ conda activate samtools
CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.
To initialize your shell, run
    $ conda init <SHELL_NAME>
Currently supported shells are:
  - bash
  - fish
  - tcsh
  - xonsh
  - zsh
  - powershell
See 'conda init --help' for more information and options.
IMPORTANT: You may need to close and restart your shell after running 'conda init'.
+ true
after conda activate samtools: PATH=3/condabin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin;
+ echo after conda activate samtools: PATH=3/condabin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin;
+ which samtools
+ true
+ 3/bin/activate samtools
+ echo after CONDA/bin/activate samtools: PATH=3/condabin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin;
+ which samtools
after CONDA/bin/activate samtools: PATH=3/condabin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin;
+ true
after export PATH=3/envs/samtools/bin:PATH: PATH=3/envs/samtools/bin:3/condabin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin;
+ export PATH=3/envs/samtools/bin:3/condabin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
+ echo after export PATH=3/envs/samtools/bin:PATH: PATH=3/envs/samtools/bin:3/condabin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin;
+ which samtools
3/envs/samtools/bin/samtools
Run Code Online (Sandbox Code Playgroud)

mer*_*erv 10

自动激活

该文档还给出了自动激活的示例。具体来说,示例 #3通过几个关键组件演示了这一点:

  1. 正如文档的重要部分和其他答案中所述,shell 需要使用登录模式,可以在作业中全局设置该模式,使用
jobs:
  example-3:
    defaults:
      run:
        shell: bash -l {0}
Run Code Online (Sandbox Code Playgroud)
  1. 向 GHA 提供环境定义setup-miniconda。在示例中etc/example-environment.yml,它定义了环境anaconda-client-env,并将其设置为使用activate-environment参数激活。
    steps:
      - uses: conda-incubator/setup-miniconda@v2
        with:
          activate-environment: anaconda-client-env
          environment-file: etc/example-environment.yml
          auto-activate-base: false
      - run: |
          conda info
          conda list
Run Code Online (Sandbox Code Playgroud)

Samtools 示例

so-samtools

我有一个用于测试环境定义的存储库,因此这里是samtools. 请注意,我更喜欢 Mamba,并且还建议捕获显式内容mamba env export来记录环境。

envs/so-samtools.yaml

name: so-samtools
channels:
  - conda-forge
  - bioconda
  - defaults
dependencies:
  - samtools
Run Code Online (Sandbox Code Playgroud)

.github/workflows/so-samtools.yaml

name: so-samtools
on:
  push:
    paths:
      - 'envs/so-samtools.yaml'
      - '.github/workflows/so-samtools.yaml'

jobs:
  create-env:
    name: ${{ matrix.os }} 
    runs-on: ${{ matrix.os }}
    defaults:
      run:
        shell: bash -l {0}
        
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, macos-latest]
        
    steps:
      - name: checkout repository
        uses: actions/checkout@v2
        
      - name: create environment with mamba
        uses: conda-incubator/setup-miniconda@v2
        with:
          mamba-version: "*"
          channels: conda-forge,bioconda,defaults
          auto-activate-base: false
          activate-environment: so-samtools
          environment-file: envs/so-samtools.yaml
      
      - name: check solution
        run: |
          mamba env export
      
      - name: test samtools
        run: |
          which samtools
          samtools help
Run Code Online (Sandbox Code Playgroud)