ChatGPT解决这个技术问题 Extra ChatGPT

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

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

将您想要默认的 Python 作为第一个放在 PATH 上?
为了回应 Piotr 的评论,这里是命令:export PATH="/Users/YOURNAME/miniconda3/bin:$PATH"
您可以粘贴为您的案例添加的 conda init 函数的内容吗? (顺便说一句,您最终是如何解决问题的?)
对我来说,conda init 确实添加(到 .zhrc)我在上面粘贴的导出命令,但由于某种原因,有一组嵌套的 if 语句阻止运行导出。我不知道为什么,但这也可能是发生在你身上的事情。无论如何,在 conda init 添加到我的 .zshrc 的代码之后添加上述内容。
你想使用 Anaconda 还是只使用 Python?

P
Peter Mortensen

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=...。从 bashrc 并使用 Anaconda Python 解释器的完整路径。


+1 为别名的想法。在 fedora 25 中,我可以添加“alias python=/usr/bin/python”,现在当我说“python”或“python2”时,我得到系统 python 2.7,但如果我说“python3”,我得到 conda python .这样做的好处是依赖于 python 2.7 的系统工具(如 gnome-tweak-tool)可以正常工作。
如果我们在 Windows 中遇到类似问题需要更改什么
嗨,conda 添加了一个部分而不是简单的一行:“# >>> conda initialize >>> # !! 此块中的内容由 'conda init' 管理!! __conda_setup="$('/home/dingxin/anaconda3 /bin/conda' 'shell.bash' 'hook' 2> /dev/null)" if [ $? -eq 0 ]; 然后 eval "$__conda_setup" else if [ -f "/home/dingxin/anaconda3/etc /profile.d/conda.sh" ]; then . "/home/dingxin/anaconda3/etc/profile.d/conda.sh" else export PATH="/home/dingxin/anaconda3/bin:$PATH" fi fi取消设置 __conda_setup # <<< conda 初始化 <<" 。在这种情况下如何处理?
在哪里可以找到 .bashrc 在 Windows 中?我想在cmd中使用python。
这样做有什么问题:export PATH="/Users/YOURNAME/miniconda3/bin:$PATH"?这似乎对我有用。
A
Asta86

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

如果删除整个语句,则必须使用 Conda 二进制文件的完整路径。

使用目录 anaconda/bin/ 中的 Conda 4.4.10 链接指向同一目录中的二进制文件,而不是 /usr/bin 中的系统文件。

使用这种方法,您可以获得以前包含在 $PATH 中的所有系统程序,以及特定于 anaconda 的系统程序,而无需使用完整路径。

所以在文件 ~/.bashrc 而不是

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

一个人会用

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

我还必须以同样的方式更改我的 ~/.bash_profile
这在 MacOS 上对我有用,通过 brew cask install anaconda 安装了 anaconda:export PATH="$PATH:/usr/local/anaconda3/bin"
这行得通。我好奇。请你解释一下为什么在路径前面添加 shell 命令“$PATH”而不是在路径后面会阻止 conda 被称为默认的 python 解释器。
因为在这种情况下,例如 /usr/bin 中的解释器在 anaconda 目录中的解释器之前找到,并且使用第一个匹配项(查看 baeldung.com/linux/path-variable 了解更多详细信息)。
对我来说,你的第一个作品。我很惊讶你用了第二个。我的命令:export PATH="/Users/YOURNAME/miniconda3/bin:$PATH"
P
Peter Mortensen

我遇到了同样的问题,您可以执行以下操作。

进入您的 .bashrc 文件,您会发现类似的一行:

export PATH=~/anaconda3/bin:$PATH

您将其注释掉,然后输入:

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

或者无论你的路径是什么。这对我有用。


P
Peter Mortensen

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


u
user1896653

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

要禁用自动基础激活:

conda config --set auto_activate_base false

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


P
Peter Mortensen

我发现,虽然我去掉了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,或者通过注释 export PATH=/usr/bin:$PATH 再次默认为 Anaconda。


这似乎没有解决 OP 问题。
P
Peter Mortensen

/home/username/anaconda/bin//usr/bin/ 目录中都有 pythonpython2python2.7 快捷方式。因此,您可以从一个文件夹中删除其中的任何一个并将其用于另一个文件夹。

我的意思是,如果您从 Anaconda 目录中删除 python2 快捷方式,您将拥有 Python for Anaconda 版本和 python2 终端中的默认版本。


P
Peter Mortensen

我很少使用 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 \$@ }"
}

.zshrc

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

sandbox_hook conda conda

此命令将正常的 conda 可执行文件转换为:

conda () {
    sandbox conda
    conda $@
}

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

它还让我感到烦恼的是,Anaconda 默认将其 Python 3 可执行文件安装为 python,这破坏了许多旧版 Python 脚本,但这是一个单独的问题。像这样使用沙盒让我明确地意识到我正在使用 Anaconda 的 Python 而不是系统默认值。


我该如何使用它?
我建议查看上面链接到的 dotfiles,将其用作一个很好的示例,但最简单的是,您需要在 ~/.bashrc~/.zshrc 中获取沙盒功能,然后通过放置以下内容为 conda 创建沙盒采购沙盒功能之后:sandbox_hook conda conda
P
Peter Mortensen

Anaconda 3 在我的 .bashrc 文件中添加的不仅仅是一个简单的行。但是,它也会将原始 .bashrc 文件备份到 .bashrc-anaconda3.bak 文件中。

所以我的解决方案是交换两者。


Linux 上的 .bak 文件?
C
Cloud Cho

就我而言,当我有

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

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

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


虚拟机不是别的吗?
@PeterMortensen你是对的。我更正了虚拟环境。