繁体   English   中英

在 gitlab CI 期间激活 conda 环境

[英]Activating conda environment during gitlab CI

我的.gitlab-ci.yml文件如下所示:

anomalydetector:
  image: continuumio/miniconda:4.7.10
  stage: build
  tags:
    - docker
  script:
    - conda env create -f environment.yml
    - conda activate my-env
    - pytest tests/.

在 Gitlab 上,这项工作开始正常,并且日志读取

$ conda env create -f environment.yml
Collecting package metadata (repodata.json): ...working... done
Solving environment: ...working... done


==> WARNING: A newer version of conda exists. <==
  current version: 4.7.10
  latest version: 4.7.11

好的,所以我使用的是 4.4 之后的conda版本,所以conda activate应该可以工作。 但是,该作业失败并显示以下内容:

# To activate this environment, use
#
#     $ conda activate my-env
#
# To deactivate an active environment, use
#
#     $ conda deactivate

$ conda activate my-env

CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.
To initialize your shell, run

    $ conda init <SHELL_NAME>

然后我尝试编辑我的.gitlab-ci.yml文件,以便有一个命令

conda init bash

但随后收到消息

==> For changes to take effect, close and re-open your current shell. <==

如何在 gitlab CI 过程中激活我的 conda 环境?

conda init触及.bashrc文件。 要重新初始化外壳,您可以使用它:

  - conda create --name myenv
  - conda init bash
  - source ~/.bashrc    # <- !!!
  - conda activate myenv 

我想这比source activate myenv好还是坏是一个单独的讨论。

与汤米的回答类似,这也需要为 Windows Powershell 完成。 与 bash conda activate myenv相反,在 powershell 中不会失败。 如果不调用conda init powershell ,它就没有任何效果(即环境没有切换),这使得它更加尴尬。 在 powershell 中重新加载配置文件更加复杂,因为其中有六个 [1]。 我用了:

 - conda create --name myenv
 - conda init powershell
 - "if (test-path $PROFILE.CurrentUserAllHosts) { & $PROFILE.CurrentUserAllHosts}"
 - conda activate myenv 

问题 [2] 中已询问 Conda 为什么使用$PROFILE.CurrentUserAllHosts配置文件。

参考:

[1] https://devblogs.microsoft.com/scripting/understanding-the-six-powershell-profiles/

[2] https://github.com/conda/conda/issues/8608

您可能会发现更简洁优雅的另一种可能性:直接获取 conda 与 bash 一起运行所需的代码。 如果不是这种情况,这也具有将 conda 添加到 PATH 的效果。

这是用

- source <anaconda_root>/etc/profile.d/conda.sh
- conda activate myenv

(盗自https://stackoverflow.com/a/60523131/11343

不知何故,所有这些答案都让我失望。 我最终使用conda run而不是激活环境。 这使我可以在不激活环境的情况下运行 pytest

- conda run -n <environment-name> python -m pytest <addl-pytest-args>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM