it-swarm.com.ru

Использовать Python по умолчанию вместо установки Anaconda при вызове из терминала

Я недавно установил анаконду версию Python. Теперь, когда я набираю python в терминале, он открывает дистрибутив anonconda, а не дистрибутив по умолчанию. Как заставить его использовать версию по умолчанию для команды python в linux (ubuntu 12.04)? 

39
Michael

anaconda добавляет путь к вашему .bashrc, чтобы он был найден первым, вы можете добавить путь к своему стандартному питону к .bashrc или удалить путь к anaconda, если не хотите его использовать.

Вы также можете использовать полный путь /usr/bin/python в bash, чтобы использовать интерпретатор python по умолчанию.

Если вы оставите свой файл .bashrc как есть, любая команда, которую вы запускаете с использованием python, будет использовать интерпретатор anaconda, если вы хотите, чтобы вы также могли использовать alias для каждого интерпретатора. 

Вы увидите что-то вроде export PATH=$HOME/anaconda/bin:$PATH в своем файле .bashrc.

Поэтому, если вы хотите использовать anaconda в качестве основного повседневного интерпретатора, используйте полный путь к вашему python по умолчанию или создайте alias, если вы хотите наоборот, удалите export PATH=.... от bashrc и используйте полный путь к интерпретатору Python anaconda.

46
Padraic Cunningham

Перепробовав все предложения, я думаю, что изменение оператора экспорта в ~/.bashrc, как, кажется, предполагает Петр Доброгост, является лучшим вариантом, учитывая следующее:

  • Если вы удалите весь оператор, вы должны будете использовать полные пути для двоичных файлов conda.
  • Использование conda 4.4.10 ссылки в каталоге anaconda/bin/указывают на двоичные файлы в том же каталоге, а не системные в/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"
13
Asta86

Я столкнулся с той же проблемой, и вы можете сделать следующее Зайдите в ваш bashrc, и вы найдете аналогичную строку

export PATH=~/anaconda3/bin:$PATH

что вы делаете, это закомментируйте это и вместо этого напечатайте 

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

или каким бы ни был твой путь. Это сработало для меня

5
Pulkit Gera

В каталоге python2 и python2.7 имеются ярлыки python, /home/username/anaconda/bin/ и /usr/bin/. Таким образом, вы можете удалить любой из них из одной папки и использовать его для другой. Я имею в виду, Если вы удалите ярлык python2 из каталога anaconda, у вас будет, Python для версии anaconda и python2 для версии по умолчанию в терминале.

1
nazmul shuvo

Я обнаружил, что хотя я удаляю export=.../anaconda3/bin:$PATH, в PATH все еще есть .../anaconda3/envs/py36/bin (моя виртуальная среда в anaconda), и Shell по-прежнему использует python anaconda.

Поэтому я export PATH=/usr/bin:$PATH (/usr/bin - это место, где находится системный python). Хотя thers уже /usr/bin inPATH, мы производим поиск до пути anaconda, но Shell будет использовать системный python, когда вы вводите python, python3.6, pip, pip3 .... 

Вы можете вернуться к anaconda, используя псевдоним, как упомянуто выше, или снова использовать anaconda по умолчанию, комментируя export PATH=/usr/bin:$PATH

1
RichardYY

Я экономно использую 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 \[email protected] }"
}

.zshrc

В моем .zshrc я создаю свои функции песочницы:

sandbox_hook conda conda

Эта команда превращает обычный исполняемый файл conda в:

conda () {
    sandbox conda
    conda [email protected]
}

Дополнительным преимуществом использования этого метода является то, что он ускоряет время загрузки оболочки, поскольку использование нескольких сценариев-оберток (например, nvm, rvm и т.д.) Может замедлить время запуска Shell.

Также мне показалось, что Anaconda по умолчанию установила свой исполняемый файл python3 как python, что нарушает многие устаревшие скрипты на python, но это отдельная проблема. Такое использование песочницы заставляет меня ясно осознавать, что я использую Python от Anaconda вместо системного по умолчанию.

0
cbcoutinho

Anaconda 3 добавляет больше, чем простая строка в мой файл .bashrc . Однако он также создает резервную копию исходного файла .bashrc в файл .bashrc-anaconda3.bak Поэтому я решил поменять их местами.

0
Marco