在同一脚本中创建和激活Conda环境

时间:2019-11-22 20:18:53

标签: python anaconda conda

我正在尝试编写同时使用condapip的安装程序。我想激活conda环境来调用pip,但是在同一脚本中这样做会导致问题。

#!/usr/bin/env bash
set -euo pipefail

conda create -y --name myenv python=3.6
conda init bash
conda activate myenv
# Perform pip-based installation here.

bash setup-environment.sh步骤运行conda activate失败:

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'.

虽然知道重新启动Shell可以解决问题会有所帮助,但我无法在脚本中执行此操作。有解决方法吗?

1 个答案:

答案 0 :(得分:1)

在登录模式下运行bash应该有效,例如

bash -l setup-environment.sh

请注意,脚本中的conda init是多余的-它编辑了.bash_profile,但实际上并未初始化当前的bash会话;用户只需执行一次即可。因此,脚本应更改为

#!/usr/bin/env bash -l
set -euo pipefail

conda create -y --name myenv python=3.6 pip
conda activate myenv
# Perform pip-based installation here.

,您可以像./setup-environment.sh一样运行它。


替代解决方案:使用YAML环境定义

诚然,我缺少您可能在脚本中计划的其他部分,但是可以使用a Conda YAML environment definition更加简洁地完成显示的所有内容。例如,如果您编写一个YAML文件,例如:

myenv.yaml

name: myenv
channels:
 - defaults
dependencies:
 - python=3.6
 - pip
 - pip:
   - some_pkg

然后运行

conda env create -f myenv.yaml

它将完全执行脚本的工作,包括所有pip安装。您可以在点requirements.txt中运行的所有命令都可以包含在YAML中。请参阅Conda GitHub中的the Advanced Pip Example