Ich habe kürzlich die Anaconda-Version von Python installiert. Wenn ich jetzt python
in das Terminal eingebe, wird die anonconda -Distribution statt der Standarddistribution geöffnet. Wie kann ich die Standardversion für den Befehl python
in Linux (ubuntu 12.04) verwenden?
anaconda fügt den Pfad zu Ihrem .bashrc
hinzu, damit er zuerst gefunden wird. Sie können den Pfad zu Ihrem Standard-Python zu .bashrc
hinzufügen oder den Pfad zu Anaconda entfernen, wenn Sie ihn nicht verwenden möchten.
Sie können auch den vollständigen Pfad /usr/bin/python
in bash verwenden, um den Standard-Python-Interpreter zu verwenden.
Wenn Sie Ihre .bashrc
-Datei unverändert lassen, verwendet jeder Befehl, den Sie mit python
ausführen, den Anaconda-Interpreter. Wenn Sie möchten, können Sie auch eine alias
für jeden Interpreter verwenden.
Sie sehen etwas wie export PATH=$HOME/anaconda/bin:$PATH
in Ihrer .bashrc
-Datei.
Wenn Sie also Anaconda als alltäglichen Interpreter für den Alltag verwenden möchten, verwenden Sie den vollständigen Pfad zu Ihrem Standard-Python oder erstellen eine alias
. Wenn Sie es andersherum wollen, entfernen Sie den export PATH=...
. von bashrc
und verwenden Sie den vollständigen Pfad zum Anaconda-Python-Interpreter.
Nachdem ich alle Vorschläge ausprobiert habe, denke ich, dass die Änderung der Export-Anweisung in ~/.bashrc, wie Piotr Dobrogost zu vermuten scheint, die beste Option ist, wenn man Folgendes bedenkt:
Also in ~/.bashrc statt
# added by Anaconda3 4.3.0 installer
export PATH="/home/user/anaconda3/bin:$PATH"
man würde verwenden
export PATH="$PATH:/home/user/anaconda3/bin"
Ich war mit dem gleichen Problem konfrontiert und Sie können Folgendes tun: __. Gehen Sie in Ihre Basisstation, und Sie werden eine ähnliche Linie finden
export PATH=~/anaconda3/bin:$PATH
was Sie tun, ist es zu kommentieren und stattdessen zu schreiben
alias pyconda='~/anaconda3/bin/python3'
oder wie auch immer dein Weg ist. Das hat für mich geklappt
Es gibt python
, python2
und python2.7
Verknüpfungen im /home/username/anaconda/bin/
und /usr/bin/
Verzeichnis. Sie können also einen beliebigen Ordner aus einem Ordner löschen und für den anderen verwenden. Ich meine, Wenn Sie python2
Verknüpfung aus dem Anaconda-Verzeichnis löschen, haben Sie Python für die Anaconda-Version und python2
für die Standardversion im Terminal.
Obwohl ich export=.../anaconda3/bin:$PATH
entferne, habe ich festgestellt, dass PATH
noch .../anaconda3/envs/py36/bin
(meine virtuelle Umgebung in anaconda) ist, und Shell weiterhin Anaconda Python verwendet.
Also export PATH=/usr/bin:$PATH
(/usr/bin
ist der Ort, an dem sich System-Python befindet). Obwohl thers bereits /usr/bin
inPATH
ist, machen wir es vor dem Pfad von anaconda. Dann verwendet Shell den Systempython, wenn Sie python
, python3.6
, pip
, pip3
.... eingeben.
Sie können zu Anaconda zurückkehren, indem Sie einen Alias verwenden, wie oben erwähnt, oder Anaconda wieder durch Kommentar export PATH=/usr/bin:$PATH
.
Ich verwende Anaconda sparsam, um plattformübergreifende Pakete zu erstellen, aber ich möchte es nicht als meinen täglichen Treiber für Python verwenden. Was ich für Anaconda-, Ruby- und Node-Projekte angenommen habe, ist die Verwendung von Umgebungssandboxen, bei denen die Funktionalität hinter einer Funktion im Wesentlichen verborgen wird, bis Sie sie speziell benötigen. Ich habe es zuerst von diesen beiden Github-Repos erfahren:
https://github.com/benvan/sandboxd
https://github.com/maximbaz/dotfiles
Ich habe eine Datei mit Sandbox-Funktionen, die folgendermaßen aussieht:
#!/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] }"
}
In meinem .zshrc
erstelle ich meine Sandbox-Funktion (en):
sandbox_hook conda conda
Dieser Befehl wandelt die normale conda
-Programmdatei in Folgendes um:
conda () {
sandbox conda
conda [email protected]
}
Ein weiterer Vorteil der Verwendung dieser Technik ist, dass die Ladezeiten von Shell beschleunigt werden, da das Laden einer Reihe von Wrapper-Skripts (z. B. nvm
, rvm
usw.) die Startzeit der Shell verlangsamt.
Es störte mich auch, dass Anaconda seine ausführbare Python3-Datei standardmäßig als python
installiert hat, was eine Menge alter Python-Skripts bricht, aber das ist ein anderes Problem. Wenn Sie Sandboxing wie dieses verwenden, wird mir explizit bewusst, dass ich Anacondas Python anstelle des Systemstandards verwende.
Anaconda 3 fügt mehr als eine einfache Zeile in meiner .bashrc ..__ hinzu. Sie sichert jedoch auch die ursprüngliche .bashrc-Datei in eine .bashrc-anaconda3.bak Meine Lösung bestand also darin, die beiden auszutauschen.