我正在尝试编写同时使用conda
和pip
的安装程序。我想激活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可以解决问题会有所帮助,但我无法在脚本中执行此操作。有解决方法吗?
答案 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
一样运行它。
诚然,我缺少您可能在脚本中计划的其他部分,但是可以使用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。