Linux Shell 脚本中 conda deactivate / conda activate 失效问题指南

发布时间:2026/7/27 17:28:06
Linux Shell 脚本中 conda deactivate / conda activate 失效问题指南 Linux Shell 脚本中 conda deactivate / conda activate 失效问题指南1. conda: error: argument COMMAND: invalid choice: deactivate / activate1.1. conda: error: argument COMMAND: invalid choice: deactivate1.2. conda: error: argument COMMAND: invalid choice: activate2. Solution 1: source ~/miniconda3/etc/profile.d/conda.sh3. Solution 2: source script_conda.sh4. Solution 3: source deactivateReferences1. conda: error: argument COMMAND: invalid choice: ‘deactivate’ / ‘activate’在 Linux 环境下直接在 Shell 脚本 (例如./script_conda.sh) 中执行conda activate或conda deactivate时会触发 invalid choice: ‘deactivate’ 和 invalid choice: ‘activate’ 错误。conda命令在系统中有两种存在形态二进制可执行文件 (位于~/miniconda3/bin/conda)只支持 install, create, list 等标准命令。Shell 内部函数只有该形态才支持activate和deactivate因为修改当前 Shell 的环境变量必须通过 Shell 函数实现。conda在 Shell 脚本中默认只是一个二进制可执行文件而不是一个 Shell 函数。在交互式终端 (Interactive Shell) 中~/.bashrc会自动将conda注册为 Shell 函数从而支持activate和deactivate这种需要修改当前 Shell 环境变量的命令。但在非交互式子 Shell (运行脚本./script_conda.sh时启动的独立进程) 中该函数默认失效conda退化为纯二进制文件从而导致报错。1.1. conda: error: argument COMMAND: invalid choice: ‘deactivate’(base) yongqiangyongqiang:~/scripts$ chmod ax script_conda.sh (base) yongqiangyongqiang:~/scripts$ (base) yongqiangyongqiang:~/scripts$ cat script_conda.sh #!/bin/bash conda env list conda deactivate (base) yongqiangyongqiang:~/scripts$ (base) yongqiangyongqiang:~/scripts$ ./script_conda.sh # conda environments: # base * /home/yongqiang/miniconda3 py37 /home/yongqiang/miniconda3/envs/py37 usage: conda [-h] [--no-plugins] [-V] COMMAND ... conda: error: argument COMMAND: invalid choice: deactivate (choose from clean, compare, config, create, info, init, install, list, notices, package, remove, uninstall, rename, run, search, update, upgrade, doctor, env, content-trust) (base) yongqiangyongqiang:~/scripts$1.2. conda: error: argument COMMAND: invalid choice: ‘activate’yongqiangyongqiang:~/scripts$ chmod ax script_conda.sh yongqiangyongqiang:~/scripts$ yongqiangyongqiang:~/scripts$ cat script_conda.sh #!/bin/bash conda activate base yongqiangyongqiang:~/scripts$ yongqiangyongqiang:~/scripts$ ./script_conda.sh usage: conda [-h] [--no-plugins] [-V] COMMAND ... conda: error: argument COMMAND: invalid choice: activate (choose from clean, compare, config, create, info, init, install, list, notices, package, remove, uninstall, rename, run, search, update, upgrade, doctor, env, content-trust) yongqiangyongqiang:~/scripts$2. Solution 1:source ~/miniconda3/etc/profile.d/conda.shYou need to add the newsource ~/miniconda3/etc/profile.d/conda.shline to your~/.bashrcfile to ensure Anaconda Python can enabled in subsequent terminal sessions.conda activate baseandconda deactivatewill need to be run in each subsequent terminal session.(base) yongqiangyongqiang:~/scripts$ cat script_conda.sh #!/bin/bash source ~/miniconda3/etc/profile.d/conda.sh conda env list conda deactivate (base) yongqiangyongqiang:~/scripts$ (base) yongqiangyongqiang:~/scripts$ ./script_conda.sh # conda environments: # base * /home/yongqiang/miniconda3 py37 /home/yongqiang/miniconda3/envs/py37 (base) yongqiangyongqiang:~/scripts$在脚本内部加载了 Conda 的环境初始化脚本强行将 conda 注册为 Shell 函数。脚本可以独立运行 (使用./script_conda.sh)不需要依赖外部环境。脚本执行完毕后当前终端 (父 Shell) 的环境不会受到任何影响。3. Solution 2:source script_conda.shsource命令或.运算符不会启动新的子 Shell而是直接在当前终端 (父 Shell) 中逐行执行脚本内的命令。因为当前终端已经初始化过 Conda所以conda activate能够正常工作。脚本执行完后会改变你当前终端的环境。例如脚本里执行了conda deactivate你当前的终端就会退出base环境。(base) yongqiangyongqiang:~/scripts$ cat script_conda.sh #!/bin/bash conda env list conda deactivate (base) yongqiangyongqiang:~/scripts$ (base) yongqiangyongqiang:~/scripts$ source script_conda.sh # conda environments: # base * /home/yongqiang/miniconda3 py37 /home/yongqiang/miniconda3/envs/py37 yongqiangyongqiang:~/scripts$yongqiangyongqiang:~/scripts$ cat script_conda.sh #!/bin/bash conda activate base yongqiangyongqiang:~/scripts$ yongqiangyongqiang:~/scripts$ source script_conda.sh (base) yongqiangyongqiang:~/scripts$4. Solution 3:source deactivate使用旧版命令source deactivate已经被 Conda 官方废弃。(base) yongqiangyongqiang:~/scripts$ cat script_conda.sh #!/bin/bash conda env list source deactivate (base) yongqiangyongqiang:~/scripts$ (base) yongqiangyongqiang:~/scripts$ ./script_conda.sh # conda environments: # base * /home/yongqiang/miniconda3 py37 /home/yongqiang/miniconda3/envs/py37 DeprecationWarning: source deactivate is deprecated. Use conda deactivate. (base) yongqiangyongqiang:~/scripts$References[1] Yongqiang Cheng (程永强), https://yongqiang.blog.csdn.net/[2] Installing via conda, https://docs.openforcefield.org/projects/toolkit/en/0.7.0/installation.html[3] Linux Shell 脚本中 conda deactivate / conda activate 失效问题指南, https://mp.weixin.qq.com/s/ixumA_tRg6zov11l8w8lVA