J'ai installé anaconda en lançant le
bash Anaconda-2.2.0-Linux-x86_64.sh
commande sur mon système Ubuntu 14.04, qui s’est installé avec succès, après quoi on m’a demandé d’exporter ma nouvelle variable d’environnement /home/username/anaconda/bin
$ PATH.
Ce faisant, j'ai pu utiliser toutes les fonctionnalités d'Anaconda, y compris l'EDI, ainsi que toutes les commandes conda-based.
La prochaine fois que j'ai démarré mon système, chaque commande mal tapée a vu un
Fatal Python error: Py_Initialize: Unable to get the locale encoding
File "/usr/local/lib/python2.7/encodings/__init__.py", line 123
raise CodecRegistryError,\
^
SyntaxError: invalid syntax
Aborted (core dumped)
erreur. (Toutes les commandes, à l'exception de python
, doivent être spécifiques)
Après avoir suivi quelques publications stackexchange et askubuntu et remarqué que mon $PYTHONPATH
avait été défini sur usr/local/lib/python2.7
, j’ai essayé de:
export PYTHONPATH=$PYTHONPATH:/home/username/anaconda/lib/python2.7
mais ça n'a pas aidé.
Cela m'a amené à traverser toute une saga de suppressions et de réinstallations de paquets, et bien sûr, de nombreuses mises à jour et mises à niveau, pour essayer de résoudre le problème moi-même.
conda info -a
renvoie:
CIO_TEST: <not set>
CONDA_DEFAULT_ENV: <not set>
CONDA_ENVS_PATH: <not set>
LD_LIBRARY_PATH: <not set>
PATH: /home/username/anaconda/bin:/home/username/Scala-sbt/sbt/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/username/bin:/usr/local/Java/jdk1.8.0_20/bin
PYTHONHOME: <not set>
PYTHONPATH: /usr/local/lib/python2.7:/home/username/anaconda/bin/python
La commande
which python
résultats
/home/username/anaconda/bin/python
et
echo "$PATH"
résultats
/home/username/anaconda/bin:/home/username/Scala-sbt/sbt/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/username/bin:/usr/local/Java/jdk1.8.0_20/bin
Je sais que cela a quelque chose à voir avec la façon dont j'ai défini les variables de chemin, en particulier dans le ~/.bashrc
dans lequel Anaconda a automatiquement ajouté le dossier/home/username/anaconda/bin à la variable $PATH
(Cela s'est produit lors de la deuxième installation d'Anaconda après son retrait le premier).
Je n'ai modifié aucune autre variable d'environnement dans ~/.profile
ou ~/.bashrc
.
J'ai ajouté la ligne d'exportation $ PYTHONPATH à mon ~/.bashrc
avant de redémarrer.
Toutes les fonctionnalités d'Anaconda fonctionnent maintenant, bien que la même erreur Fatal Python error: Py_Initialize: Unable to get the locale encoding
continue à s'afficher au lieu de l'erreur de commande inconnue habituelle, pour la plupart des commandes mal orthographiées.
Je vais continuer à chercher et modifier ma réponse (ou me référer aux réponses existantes, le cas échéant) dès que je saurai pourquoi cela se produit.
Je recommanderais de désactiver PYTHONPATH. Ce n'est généralement pas nécessaire, et cela provoque des problèmes comme celui-ci en obligeant un Python à charger des objets d'un autre Python (dans ce cas, il ressemble au système Python 3 tente de charger quelque chose qui a été écrit pour Python 2).
J'ai eu des problèmes similaires au cours des deux derniers jours, donc je l'ai remonté à la façon dont bash gère "commande introuvable". Dans Ubuntu 14.04 (et Linux Mint 17, que j’utilise les scripts 14.04), /etc/bash.bashrc a la fonction suivante:
if [ -x /usr/lib/command-not-found ]; then
function command_not_found_handle {
# check because c-n-f could've been removed in the meantime
if [ -x /usr/lib/command-not-found ]; then
/usr/bin/python /usr/lib/command-not-found -- $1
return $?
else
return 127
fi
}
fi
Cependant,/usr/lib/command-not-found a été réécrit pour Python 3. Il gère la commande /etc/bash.bashrc avec:
if sys.version < '3':
# We might end up being executed with Python 2 due to an old
# /etc/bash.bashrc.
import os
if "COMMAND_NOT_FOUND_FORCE_PYTHON2" not in os.environ:
os.execvp("python3", [sys.argv[0]] + sys.argv)
Ceci appelle "python3" depuis le chemin plutôt que de donner le chemin direct. Pour corriger cela, la ligne 22 de/usr/lib/command-not-found doit être changée de
os.execvp("python3", [sys.argv[0]] + sys.argv)
à
os.execv("/usr/bin/python3", [sys.argv[0]] + sys.argv)
Cela semble être un bug avec Ubuntu plutôt que Anaconda. Je vais vérifier si cela apparaît dans les distributions ultérieures.
Après avoir installé python3 dans les emplacements standard et compris que j'avais besoin que Sudo l'utilise, j'ai installé localement en utilisant ceci dans mon répertoire personnel:
python3 -m venv env_py3
source env_py3/bin/activate
Mais eu plus d'erreurs. Désactiver simplement PYTHONPATH sur l'instance Amazon Linux d'AWS était tout simplement génial pour moi.