web-dev-qa-db-fra.com

Fatal Python error: Py_Initialize: Impossible d'obtenir le codage des paramètres régionaux ... SyntaxError: syntaxe non valide Aborted (core dumped)

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.

13
samirzach

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).

10
asmeurer

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.

3
rymac

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.

1
Rigger