我已经在Ubuntu Server 18上安装了最新的anaconda version: 4.7.12
。
在终端中,为什么conda deactivate
却没有/root/newinstall/anaconda3/bin/conda deactivate
?
这是which conda
的输出:
(base) root@jenkinstest:~# which conda
/root/newinstall/anaconda3/bin/conda
运行/root/newinstall/anaconda3/bin/conda deactivate
时,我期望conda deactivate
命令具有相同的行为,所以请停用当前的conda环境。
但是,如果我运行/root/newinstall/anaconda3/bin/conda deactivate
,则会出现以下错误:
(py36) root@jenkinstest:~# /root/newinstall/anaconda3/bin/conda deactivate
CommandNotFoundError: Your shell has not been properly configured to use 'conda deactivate'.
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'.
请注意,我已经按照建议使用conda init shell
,并且还重新启动了shell会话。但是仍然出现相同的错误。
答案 0 :(得分:3)
使用bash(或ash,zsh或破折号)作为shell时,conda
实际上是函数,而不是命令,并且which
不会向您显示其定义。
conda
cli(命令行界面)仅用于支持设置Shell集成,这就是为什么您看到conda init
错误消息的原因。
如果您运行which conda
而不是type conda
,则会看到它的定义。或查看etc/profile.d/conda.sh
definition on GitHub。 conda deactivate
运行__conda_activate deactivate
,依此类推。其他shell集成也沿相同的方向进行。
Conda使用特定于shell的集成,因此,如果您不热衷于此,则应使用其中一种:
etc/profile.d/conda.csh
etc/fisd/conf.d/conda.fish
conda.xsh
condabin/Conda.psm1
(通过condabin/conda-hook.ps1
作为模块导入)condabin/conda_hook.bat
,然后从condabin/conda.bat
和condabin/_conda_activate.bat
开始。 内幕确实会使用您的conda
cli,但是会添加当前的shell信息。他们依靠Shell集成来确保在当前Shell中发出正确的Shell命令并对其进行评估。您无法在新进程中执行此操作,因为子进程无法以其他方式更改您的Shell环境并设置PATH
之类的内容,也无法添加或删除其他Shell变量。
因此,bash中的conda deactivate
使用bash函数调用,并且当该函数调用然后执行/root/newinstall/anaconda3/bin/conda shell.posix deactivate
时,它是eval
instruction的一部分。 .../conda shell.posix deactivate
命令输出一系列bash命令,然后eval
在您当前的shell中执行,因此停用conda环境配置。
因此,如果您真的真的想使用该命令行工具,则必须自己评估它的输出:
eval `/root/newinstall/anaconda3/bin/conda shell.posix deactivate`
以上当然是特定于bash(兼容)shell的! `
周围的/root/newinstall/anaconda3/bin/conda shell.posix deactivate
反引号告诉bash将命令输出作为字符串提供给到eval
。如果运行时没有eval `...`
部分,则会看到它发出的命令:
(base) root@jenkinstest:~# /root/newinstall/anaconda3/bin/conda shell.posix deactivate
export PATH='/root/newinstall/anaconda3/condabin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin'
unset CONDA_PREFIX
unset CONDA_DEFAULT_ENV
unset CONDA_PROMPT_MODIFIER
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
export CONDA_SHLVL='0'
export CONDA_EXE='/root/newinstall/anaconda3/bin/conda'
export _CE_M=''
export _CE_CONDA=''
export CONDA_PYTHON_EXE='/root/newinstall/anaconda3/bin/python'
(请注意,仅在活动conda环境中产生输出)。