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

时间:2014-07-09 21:57:31

标签: python linux anaconda

我最近安装了anaconda版本的python。现在,当我在终端中键入python时,它会打开anonconda发行版而不是默认发行版。如何让它在linux(ubuntu 12.04)中使用命令python的默认版本?

10 个答案:

答案 0 :(得分:50)

anaconda将路径添加到.bashrc,因此首先找到它,您可以将默认python的路径添加到.bashrc,或者如果您不想使用它,则删除anaconda的路径

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

如果您保留.bashrc文件,则使用python运行的任何命令都将使用anaconda解释器,如果需要,您还可以为每个解释器使用alias

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

所以基本上如果你想使用anaconda作为你的主要日常翻译使用默认python的完整路径或创建一个alias,如果你想要它反过来删除export PATH=...。来自bashrc并使用完整路径到anaconda python解释器。

答案 1 :(得分:14)

到目前为止我已经尝试了所有建议我认为修改〜/ .bashrc中的export语句,正如Piotr Dobrogost似乎所暗示的那样,是考虑以下因素的最佳选择:

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

所以在〜/ .bashrc而不是

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

一个人会用

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

答案 2 :(得分:6)

我遇到了同样的问题,您可以执行以下操作 进入您的bashrc,您会发现类似的一行

export PATH=~/anaconda3/bin:$PATH

您要做的就是将其注释掉,然后输入

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

或任何路径。这对我有用

答案 3 :(得分:1)

pythonpython2两个目录中都有python2.7/home/username/anaconda/bin//usr/bin/个快捷方式。因此,您可以从一个文件夹中删除其中任何一个,并将其用于其他文件夹。我的意思是, 如果你从anaconda目录中删除python2快捷方式,你将拥有, python for anaconda版本和 python2表示终端中的默认版本。

答案 4 :(得分:1)

我发现虽然我删除了export=.../anaconda3/bin:$PATH,但.../anaconda3/envs/py36/bin中仍有PATH(我在anaconda中的虚拟环境),shell仍使用anaconda python。

所以我export PATH=/usr/bin:$PATH/usr/bin是系统python驻留的地方)。虽然/usr/bin中的PATH已经python,但我们会在anaconda的路径之前搜索它,然后当您键入python3.6pip,{{1}时,shell将使用系统python },pip3 ....

你可以使用上面提到的别名来回到anaconda,或者通过评论export PATH=/usr/bin:$PATH再次默认为anaconda

答案 5 :(得分:1)

在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安装。

答案 6 :(得分:1)

在 2020 年,就像提到的@spacetyper 一样,它的行为有所不同。我从这个问题中找到了一个方便的解决方案:How do I prevent Conda from activating the base environment by default?

要禁用自动基础激活:

conda config --set auto_activate_base false

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

答案 7 :(得分:0)

我谨慎地使用Anaconda构建跨平台软件包,但我不想将它用作我日常的python驱动程序。我为Anaconda,Ruby和Node项目采用的是使用环境沙箱,它基本上隐藏了远离您路径的功能,直到您特别需要它为止。我首先从这两个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 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 \$@ }"
}

.zshrc

在我的.zshrc我创建了我的沙箱&#39; d功能:

sandbox_hook conda conda

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

conda () {
    sandbox conda
    conda $@
}

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

它还告诉我,Anaconda默认将它的python3可执行文件安装为python,这打破了许多传统的python脚本,但这是一个单独的问题。像这样使用沙盒让我明确地意识到我使用的是Anaconda的python而不是系统默认值。

答案 8 :(得分:0)

Anaconda 3在我的.bashrc中添加了不仅仅是简单的一行。 但是,它也将原始.bashrc文件备份到.bashrc-anaconda3.bak中。 所以我的解决方案是交换两者。

答案 9 :(得分:0)

对于我来说,当我有

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

~/.bashrc中,它始终在Anaconda虚拟环境内部和外部调用python3.6

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