J'ai récemment installé la version anaconda de python. Maintenant, lorsque je tape python
dans le terminal, cela ouvre la distribution anonconda plutôt que la distribution par défaut. Comment l'obtenir pour qu'il utilise la version par défaut de la commande python
sous linux (Ubuntu 12.04)?
anaconda ajoute le chemin d'accès à votre .bashrc
afin qu'il soit trouvé en premier. Vous pouvez ajouter le chemin d'accès à votre python par défaut à .bashrc
ou supprimer le chemin d'accès à anaconda si vous ne souhaitez pas l'utiliser.
Vous pouvez également utiliser le chemin d'accès complet /usr/bin/python
dans bash pour utiliser l'interpréteur python par défaut.
Si vous laissez votre fichier .bashrc
en l'état, toute commande que vous exécutez avec python
utilisera l'interpréteur anaconda. Si vous le souhaitez, vous pouvez également utiliser une variable alias
pour chaque interpréteur.
Vous verrez quelque chose comme export PATH=$HOME/anaconda/bin:$PATH
dans votre fichier .bashrc
.
En résumé, si vous souhaitez utiliser anaconda comme principal interprète au quotidien, utilisez le chemin complet de votre python par défaut ou créez une variable alias
, si vous le souhaitez, supprimez le export PATH=...
. depuis bashrc
et utilisez le chemin complet vers l'interpréteur anaconda python.
Après avoir essayé toutes les suggestions jusqu'à présent, je pense que la modification de la déclaration d'exportation dans ~/.bashrc, comme semble le suggérer Piotr Dobrogost, est la meilleure option compte tenu de ce qui suit:
Donc, dans ~/.bashrc au lieu de
# added by Anaconda3 4.3.0 installer
export PATH="/home/user/anaconda3/bin:$PATH"
on utiliserait
export PATH="$PATH:/home/user/anaconda3/bin"
J'ai fait face au même problème et vous pouvez faire ce qui suit Allez dans votre base et vous trouverez un type de ligne similaire
export PATH=~/anaconda3/bin:$PATH
ce que vous faites est commenter et taper à la place
alias pyconda='~/anaconda3/bin/python3'
ou quel que soit votre chemin. Cela a fonctionné pour moi
Il existe des raccourcis python
, python2
et python2.7
dans les répertoires /home/username/anaconda/bin/
et /usr/bin/
. Ainsi, vous pouvez supprimer l'un d'entre eux d'un dossier et l'utiliser pour l'autre. Je veux dire, Si vous supprimez le raccourci python2
du répertoire anaconda, vous aurez, Python pour la version anaconda et python2
pour la version par défaut du terminal.
J'ai constaté que même si je supprime export=.../anaconda3/bin:$PATH
, il y a toujours .../anaconda3/envs/py36/bin
(mon environnement virtuel dans anaconda) dans PATH
et Shell utilise toujours l'anaconda python.
Donc, je export PATH=/usr/bin:$PATH
(/usr/bin
est l'endroit où réside le système python). Bien que thers soit déjà /usr/bin
inPATH
, nous le faisons avant le chemin d’Anaconda, puis Shell utilisera le python système lorsque vous saisissez python
, python3.6
, pip
, pip3
....
Vous pouvez revenir à anaconda en utilisant le pseudonyme mentionné ci-dessus, ou revenir à anaconda en commentant par le commentaire export PATH=/usr/bin:$PATH
J'utilise Anaconda avec parcimonie pour construire des packages multi-plateformes, mais je ne souhaite pas l'utiliser comme pilote quotidien pour python. Ce que j’ai adopté pour les projets Anaconda, Ruby et Node, c’est d’utiliser le sand-boxing d’environnement, qui masque la fonctionnalité derrière une fonction loin de votre chemin jusqu’à ce que vous en ayez spécifiquement besoin. J'ai d'abord appris à ce sujet de ces deux dépôts de github:
https://github.com/benvan/sandboxd
https://github.com/maximbaz/dotfiles
J'ai un fichier de fonctions de sandboxing qui ressemble à ceci:
#!/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 \$@ }"
}
Dans mon .zshrc
, je crée ma (mes) fonction (s) sandbox:
sandbox_hook conda conda
Cette commande transforme l'exécutable conda
normal en:
conda () {
sandbox conda
conda $@
}
L'avantage supplémentaire de cette technique réside dans le fait qu'elle accélère les temps de chargement du shell, car la recherche de plusieurs scripts d'encapsuleur (par exemple, nvm
, rvm
, etc.) peut ralentir le temps de démarrage de votre shell.
Cela m'a aussi causé un problème quand Anaconda a installé son exécutable python3 sous la forme python
par défaut, ce qui casse de nombreux scripts python hérités, mais il s'agit d'un problème distinct. Utiliser le sandboxing comme ceci me fait clairement comprendre que j'utilise le python d'Anaconda au lieu de celui par défaut du système.
Anaconda 3 ajoute plus qu'une simple ligne dans mon .bashrc . Cependant, il sauvegarde également le fichier .bashrc d'origine en un fichier .bashrc-anaconda3.bak Ma solution a donc été d'échanger les deux.