簡體   English   中英

從終端調用時使用默認 Python 而不是 Anaconda 安裝

[英]Use the default Python rather than the Anaconda installation when called from the terminal

我最近安裝了 Python 的 Anaconda 版本。 現在,當我在終端中輸入python ,它會打開 Anaconda 發行版而不是默認發行版。 如何讓它在 Linux ( Ubuntu 12.04 (Precise Pangolin)) 上使用命令python的默認版本?

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 解釋器的完整路徑。

到目前為止已經嘗試了所有建議,我認為修改文件~/.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"

我遇到了同樣的問題,您可以執行以下操作。

進入你的.bashrc文件,你會發現類似的一行:

export PATH=~/anaconda3/bin:$PATH

您將其注釋掉並輸入:

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

或者無論你的道路是什么。 這對我有用。

在 2020 年,就像提到的@spacetyper 一樣,它的行為有所不同。 我從這個問題中找到了一個方便的解決方案: 默認情況下,如何防止 Conda 激活基本環境?

要禁用自動基礎激活:

conda config --set auto_activate_base false

第一次運行后,它會在主目錄中創建一個./condarc

/home/username/anaconda/bin//usr/bin/目錄中都有pythonpython2python2.7快捷方式。 因此,您可以從一個文件夾中刪除其中任何一個並將其用於另一個文件夾。

我的意思是,如果您從 Anaconda 目錄中刪除python2快捷方式,您將在終端中擁有用於 Anaconda 版本的 Python 和用於默認版本的python2

我發現,雖然我刪除export=.../anaconda3/bin:$PATH ,還有.../anaconda3/envs/py36/bin的(我在虛擬環境蟒蛇) PATH ,並且外殼依舊采用蟒蛇Python。

所以我export PATH=/usr/bin:$PATH/usr/bin是系統 Python 所在的位置)。 雖然PATH已經有/usr/bin了,但是我們先搜索到 Anaconda 的路徑,然后 shell 會在你輸入python , python3.6 , pip , pip3 ... 時使用系統 Python。

您可以使用上述別名返回 Anaconda,或者通過注釋export PATH=/usr/bin:$PATH再次默認使用 Anaconda。

我很少使用 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'd功能(S):

sandbox_hook conda conda

此命令將普通的conda可執行文件轉換為:

conda () {
    sandbox conda
    conda $@
}

使用這種技術的一個額外好處是它加快了 shell 加載時間,因為獲取許多包裝腳本(例如nvmrvm等)會減慢你的 shell 啟動時間。

它還竊聽我,蟒蛇安裝了Python 3的可執行文件python在默認情況下,它打破了很多傳統的Python腳本的,但是這是一個單獨的問題。 像這樣使用沙箱讓我清楚地意識到我使用的是 Anaconda 的 Python 而不是系統默認值。

Anaconda 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 install 和使用pyconda調用 Conda install 。

就我而言,當我有

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

~/.bashrc ,它總是在 Anaconda 虛擬環境內外調用python3.6

在此設置中,您可以在每個虛擬環境中通過python3設置 Python 版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM