无法在shell脚本中激活conda环境。

5

我已经尝试过Stack Overflow上提供的所有方法,但都没有成功。我的操作系统是macOS Big Sur 11.6,在Terminal中使用bash(不是zsh)。

我正在尝试创建一个设置文件,并使用sh setup.sh执行该文件,以安装Python并激活它来设置环境。没有什么复杂的操作。手动执行可以正常工作,但一旦将其放入shell脚本中,就无法正常工作。我是在一个空项目文件夹中运行此脚本的。

当前的脚本:

conda create -n MASTER python=3.8.5 -y

conda activate MASTER

很简单,首先注释掉其他pip安装直到这个正常工作。

我尝试运行:bash -i setup.sh但仍然没有激活。我没有收到任何错误消息,但我仍然被困在(base)中。

我尝试在脚本开始和/或激活之前使用source:source /opt/anaconda3/etc/profile.d/conda.sh,但仍然不起作用。再次没有错误,但我仍然被困在(base)中。

我尝试在脚本开始和在尝试激活环境之前使用: eval $(conda shell.bash hook),但它失败了。这一次,我收到了错误消息:

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

但是如果我在终端或脚本中运行conda init bash命令,则会输出:

no change     /opt/anaconda3/condabin/conda
no change     /opt/anaconda3/bin/conda
no change     /opt/anaconda3/bin/conda-env
no change     /opt/anaconda3/bin/activate
no change     /opt/anaconda3/bin/deactivate
no change     /opt/anaconda3/etc/profile.d/conda.sh
no change     /opt/anaconda3/etc/fish/conf.d/conda.fish
no change     /opt/anaconda3/shell/condabin/Conda.psm1
no change     /opt/anaconda3/shell/condabin/conda-hook.ps1
no change     /opt/anaconda3/lib/python3.8/site-packages/xontrib/conda.xsh
no change     /opt/anaconda3/etc/profile.d/conda.csh
no change     /Users/liquidRock/.bash_profile
No action taken.

我尝试执行了/opt/anaconda3/bin/conda activate MASTER,这也提示我要执行conda init bash

甚至还尝试在文件顶部添加#!/bin/bash,但没有用。


1
为什么不获取脚本的源代码?执行它不可能改变你的环境。 - Fravadona
此外,看一下 (Ana|Mini)conda 添加到你的 .bashrc 中的内容,这是你在脚本中想要执行 conda 操作时需要添加的内容。 - Fravadona
可能是因为我只做了4天这种东西:P 哇塞,它起作用了:在终端中输入source setup.sh。谢谢。Anaconda没有添加任何内容到我的.bashrc文件中。所有内容都在.bash_profile文件中。将所有conda代码从那里复制到脚本中,仍然无法工作。它不会激活。‍♂️ - liquidRock
1
执行脚本无法修改您的shell环境,无论在其中执行什么操作,因为它是在其自己的环境(子shell)中执行的。source内置旨在从当前shell环境中读取和执行文件中的命令 - Fravadona
1个回答

4

感谢@fravadona提供的最简单的解决方案。

只需使用source代替sh来执行脚本即可。 ‍♂️

最终的setup.sh脚本(包含我的预备pip安装):

# env & python
conda create -n MASTER python=3.8.5 -y
conda activate MASTER

# pip installs
pip install cmake
pip install --upgrade pip setuptools wheel
pip install opencv-python==4.2.0.32
pip install argparse
pip install datetime
pip install colorama
pip install python-dotenv
pip install python-dotenv[cli]

执行方式如下:

$ source setup.sh

Anaconda会创建环境、安装Python和依赖项、激活环境,之后使用pip安装额外的依赖项。

我还不确定为什么通过将其他内容添加到shell脚本中就不能工作,但这仍然是一个很好、简单的解决方案。是的,我对这些东西还是个新手。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接