为什么<conda路径>停用不起作用?

时间:2019-11-25 11:41:07

标签: python anaconda conda

我已经在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会话。但是仍然出现相同的错误。

1 个答案:

答案 0 :(得分:3)

使用bash(或ash,zsh或破折号)作为shell时,conda实际上是函数,而不是命令,并且which不会向您显示其定义。

conda cli(命令行界面)仅用于支持设置Shell集成,这就是为什么您看到conda init错误消息的原因。

如果您运行which conda而不是type conda,则会看到它的定义。或查看etc/profile.d/conda.sh definition on GitHubconda deactivate运行__conda_activate deactivate,依此类推。其他shell集成也沿相同的方向进行。

Conda使用特定于shell的集成,因此,如果您不热衷于此,则应使用其中一种:

内幕确实会使用您的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环境中产生输出)。