当从终端调用时,使用默认的 Python 而不是 Anaconda 安装

我最近安装了 Anaconda 版本的 Python。现在,当我在终端中键入 python时,它会打开 Anaconda 发行版,而不是默认发行版。如何让它在 Linux 上使用命令 python的默认版本(Ubuntu 12.04(精确穿山甲)) ?

100894 次浏览

Anaconda 将路径添加到 .bashrc,因此首先找到它。您可以将默认 Python 实例的路径添加到 .bashrc,或者如果不想使用它,可以删除 Anaconda 的路径。

您还可以在 Bash 中使用完整路径 /usr/bin/python来使用默认的 Python 解释器。

如果保持 .bashrc文件不变,那么使用 python运行的任何命令都将使用 Anaconda 解释器。如果需要,还可以为每个解释器使用 alias

您将在 .bashrc文件中看到类似于 export PATH=$HOME/anaconda/bin:$PATH的内容。

因此,基本上,如果您想使用 Anaconda 作为您的主要日常解释器,使用默认 Python 的完整路径或创建 alias。如果你想要它反过来,删除 export PATH=...。并使用到 Anaconda Python 解释器的完整路径。

/home/username/anaconda/bin//usr/bin/目录中都有 pythonpython2python2.7快捷方式。所以你可以从一个文件夹中删除其中的任何一个,然后把它用在另一个文件夹中。

我的意思是,如果你从 Anaconda 目录中删除 python2快捷方式,你就会得到 Python for Anaconda 版本和 终端中默认版本的 python2

到目前为止,我已经尝试了所有的建议,我认为修改 ~/. bashrc文件中的出口声明,正如 Piotr Dobrogost 似乎建议的那样,是考虑到以下情况的最佳选择:

  • 如果删除整个语句,则必须为 康达二进制文件使用完整路径。
  • 使用目录 蟒蛇/垃圾桶/中的 Conda 4.4.10链接指向同一目录中的二进制文件,而不是 /usr/bin中的系统文件。
  • 使用这种方法,您可以获得以前包含在 $PATH 中的所有系统程序,以及不使用完整路径的特定于蟒蛇的系统程序。

因此,在文件 ~/. bashrc而不是

# Added by the Anaconda3 4.3.0 installer
export PATH="/home/user/anaconda3/bin:$PATH"

一个人会用

export PATH="$PATH:/home/user/anaconda3/bin"

我发现,尽管我删除了 export=.../anaconda3/bin:$PATH,但是在 PATH中仍然有 .../anaconda3/envs/py36/bin(我在 Anaconda 中的虚拟环境) ,并且 shell 仍然使用 Anaconda Python。

因此,我使用 export PATH=/usr/bin:$PATH(/usr/bin是系统 Python 所在的位置)。虽然在 PATH中已经有了 /usr/bin,但是我们使它在 Anaconda 的路径之前搜索,然后当您键入 pythonpython3.6pippip3时 shell 将使用系统 Python... 。

你可以像上面提到的那样使用别名返回到 Anaconda,或者通过注释 abc0再次默认返回到阿纳康达。

我很少使用 Anaconda 来构建跨平台的包,但是我不想把它作为 Python 的日常驱动程序。对于 Anaconda、 Ruby 和 Node.js 项目,我已经采用了环境沙盒,它实际上将功能隐藏在函数背后,远离路径,直到您特别需要它。我最初是从这两个 GitHub 仓库中了解到它的:

Https://github.com/benvan/sandboxd

Https://github.com/maximbaz/dotfiles

我有一个沙箱函数文件,看起来像这样:

. zsh/sandboxd.zsh:

#!/bin/zsh
# Based on
#    https://github.com/maximbaz/dotfiles/.zsh/sandboxd.zsh
# which was originally adapted from:
#    https://github.vom/benvan/sandboxd


# Start with an empty list of all sandbox cmd:hook pairs
sandbox_hooks=()


# deletes all hooks associated with cmd
function sandbox_delete_hooks() {
local cmd=$1
for i in "${sandbox_hooks[@]}";
do
if [[ $i == "${cmd}:"* ]]; then
local hook=$(echo $i | sed "s/.*://")
unset -f "$hook"
fi
done
}


# Prepares the environment and removes hooks
function sandbox() {
local cmd=$1
# NOTE: Use original grep, because aliased grep is using color
if [[ "$(type $cmd | \grep -o function)" = "function" ]]; then
(>&2 echo "Lazy-loading '$cmd' for the first time...")
sandbox_delete_hooks $cmd
sandbox_init_$cmd
else
(>&2 echo "sandbox '$cmd' not found.\nIs 'sandbox_init_$cmd() { ... }' defined and 'sandbox_hook $cmd $cmd' called?")
return 1
fi
}


function sandbox_hook() {
local cmd=$1
local hook=$2


#echo "Creating hook ($2) for cmd ($1)"
sandbox_hooks+=("${cmd}:${hook}")


eval "$hook(){ sandbox $cmd; $hook \$@ }"
}

。 zhrc

在我的 .zshrc中,我创建了我的沙盒函数:

sandbox_hook conda conda

此命令将普通的 conda可执行文件转换为:

conda () {
sandbox conda
conda $@
}

使用这种技术的另一个好处是,它加快了 shell 加载时间,因为提供大量的包装器脚本(例如 nvmrvm等)可以减慢 shell 启动时间。

Anaconda 在默认情况下将其 Python 3可执行文件安装为 python,这也让我感到不安,因为这破坏了许多传统的 Python 脚本,但这是另一个问题。像这样使用沙箱使我明确地意识到我正在使用 Anaconda 的 Python 而不是系统默认值。

我面临着同样的问题,你可以做到以下几点。

进入 别名和函数”rel = “ nofollow noReferrer”> . bashrc 文件,你会发现类似的一行:

export PATH=~/anaconda3/bin:$PATH

你把它注释出来,而不是打出来:

alias pyconda='~/anaconda3/bin/python3'

不管你走的是什么路,这对我有用。

蟒蛇3在我的 。 bashrc文件中添加了不止一行。 但是,它也将原始的 。 bashrc文件备份到一个 . bashrc-anaconda3. bak文件中。

所以我的解决办法就是把这两个交换。

在2020年,Conda 在 .bash_profile文件的底部添加了一个更复杂的代码块,看起来像这样:

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/Users/spacetyper/opt/miniconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
eval "$__conda_setup"
else
if [ -f "/Users/spacetyper/opt/miniconda3/etc/profile.d/conda.sh" ]; then
. "/Users/spacetyper/opt/miniconda3/etc/profile.d/conda.sh"
else
export PATH="/Users/spacetyper/opt/miniconda3/bin:$PATH"
fi
fi
unset __conda_setup
# <<< conda initialize <<<

默认情况下要使用默认的 Python 安装: 只需将这部分代码移到 .bash_profile文件的最顶部。

为了给自己提供使用已安装的 Conda Python 的选项: 在上面的 Conda 代码块中添加这一行 下面

alias pyconda="/Users/spacetyper/opt/miniconda3/bin/python3"

现在您应该能够使用 python调用系统 Python 安装,使用 pyconda调用 Conda 安装。

为了我的案子

alias python='/usr/bin/python3.6'

~/.bashrc中,它总是在 Anaconda 虚拟环境内外称为 python3.6

在此设置中,可以在每个虚拟环境中通过 python3设置 Python 版本。

在2020年,就像@spaceetyper 提到的那样,它的行为是不同的。我从这个问题中找到了一个方便的解决方案: 如何防止 Conda 在默认情况下激活基本环境?

禁用基地自动激活:

conda config --set auto_activate_base false

它将在第一次运行后在主目录中创建一个 ./condarc