【问题标题】:Use the default Python rather than the Anaconda installation when called from the terminal从终端调用时使用默认 Python 而不是 Anaconda 安装
【发布时间】:2014-08-31 02:43:46
【问题描述】:

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

【问题讨论】:

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

标签: python linux anaconda


【解决方案1】:

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 ]; then eval "$__conda_setup" else if [ -f " /home/dingxin/anaconda3/etc/profile.d/conda.sh" ]; 然后 . "/home/dingxin/anaconda3/etc/profile.d/conda.sh" else export PATH="/home/dingxin/anaconda3 /bin:$PATH" fi fi unset __conda_setup #
  • 在windows中哪里可以找到.bashrc??我想在cmd中使用python。
  • 这样做有什么问题:export PATH="/Users/YOURNAME/miniconda3/bin:$PATH"?这似乎对我有用。
【解决方案2】:

到目前为止,已经尝试了所有建议,我认为修改文件 ~/.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"
【解决方案3】:

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

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

export PATH=~/anaconda3/bin:$PATH

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

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

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

【讨论】:

    【解决方案4】:

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

    禁用自动基础激活:

    conda config --set auto_activate_base false
    

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

    【讨论】:

      【解决方案5】:

      在 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】:

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

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

        【讨论】:

          【解决方案7】:

          我发现,虽然我去掉了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 问题。
          【解决方案8】:

          我很少使用 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 中获取沙盒函数,然后创建通过将以下 after 源沙盒功能放置为 conda 的沙盒:sandbox_hook conda conda
          【解决方案9】:

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

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

          【讨论】:

          • Linux 上的 .bak 文件?
          【解决方案10】:

          就我而言,当我有

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

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

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

          【讨论】:

          • 虚拟机不是别的吗?
          • @PeterMortensen 你是对的。我更正了虚拟环境。
          猜你喜欢
          • 1970-01-01
          • 2022-11-29
          • 2017-06-27
          • 2017-12-18
          • 2014-05-11
          • 1970-01-01
          • 1970-01-01
          • 2020-12-11
          • 2020-03-05
          相关资源
          最近更新 更多