Schwerwiegender Python-Fehler: Py_Initialize: Kann die Gebietsschema-Codierung nicht abrufen ... SyntaxError: Ungültige Syntax Aborted (Core Dumped)

10

Ich habe Anaconda installiert, indem ich das

ausgeführt habe
bash Anaconda-2.2.0-Linux-x86_64.sh

Befehl auf meinem Ubuntu 14.04 System, das erfolgreich installiert wurde, nach dem ich aufgefordert wurde, meine neue /home/username/anaconda/bin $ PATH Umgebungsvariable zu exportieren.

Dadurch konnte ich alle Funktionen von Anaconda, einschließlich der IDEs, nutzen und alle conda-basierten Befehle erfolgreich verwenden.

Als ich das nächste Mal mein System hochgefahren habe, sah jeder fehlgetippte Befehl ein

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)

Fehler. (Alle Befehle außer python , um spezifisch zu sein)

Nachdem ich ein paar Stackexchange- und askubuntu-Posts gelesen hatte und bemerkte, dass mein $PYTHONPATH auf usr/local/lib/python2.7 gesetzt war, versuchte ich

export PYTHONPATH=$PYTHONPATH:/home/username/anaconda/lib/python2.7

aber es hat nicht geholfen.

Das führte mich durch eine ganze Saga von Paketentfernungen und Neuinstallationen und natürlich viele Updates und Upgrades, um das Problem selbst zu beheben.

conda info -a gibt zurück:

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

Der Befehl

which python

gibt

zurück
/home/username/anaconda/bin/python

und

echo "$PATH"

gibt

zurück
/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

Ich weiß, dass es etwas mit der Art zu tun hat, wie ich die Pfadvariablen einstelle, insbesondere in ~/.bashrc , in der Anaconda meinen Ordner / home / username / anaconda / bin automatisch der Variable $PATH vorangestellt hat (Dies geschah während eines zweite Installation von Anaconda, nachdem ich es zuerst entfernt habe).

Ich habe keine andere Umgebungsvariable in ~/.profile oder ~/.bashrc geändert.

Ich habe vor dem Neustart die Zeile export $ PYTHONPATH zu meinem ~/.bashrc hinzugefügt.

Alle Funktionen von Anaconda funktionieren jetzt, obwohl für die meisten falsch eingegebenen Befehle immer der gleiche Fatal Python error: Py_Initialize: Unable to get the locale encoding -Fehler angezeigt wird anstelle des üblichen unbekannten Befehlsfehlers.

Ich werde mich weiter damit befassen und meine Antwort editieren (oder auf vorhandene Antworten zurückgreifen, wenn es welche gibt), sobald ich herausfinde, warum das passiert.

    
samirzach 23.06.2015, 17:31

3 Antworten

9

Ich würde empfehlen, PYTHONPATH unscharf zu stellen. Es wird im Allgemeinen nicht benötigt, und es bewirkt, dass Dinge so brechen, indem ein Python Dinge von einem anderen Python lädt (in diesem Fall sieht es so aus, als ob das System Python 3 versucht, etwas zu laden, das für Python 2 geschrieben wurde).

    
asmeurer 24.06.2015, 18:40
3

Ich hatte in den letzten paar Tagen ähnliche Probleme, also habe ich es zurückverfolgt, wie bash behandelt "Befehl nicht gefunden". In Ubuntu 14.04 (und Linux Mint 17, welches die 14.04-Skripte verwendet), hat /etc/bash.bashrc die folgende Funktion:

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 -- 
            return $?
        else
           return 127
        fi
    }
fi

Allerdings wurde / usr / lib / command-not-found für Python 3 neu geschrieben. Es behandelt den Befehl /etc/bash.bashrc mit:

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)

Dies ruft "python3" vom Pfad auf, anstatt den direkten Pfad anzugeben. Um dies zu korrigieren, sollte Zeile 22 von / usr / lib / command-not-found von

geändert werden
os.execvp("python3", [sys.argv[0]] + sys.argv)

bis

os.execv("/usr/bin/python3", [sys.argv[0]] + sys.argv)

Dies scheint ein Fehler mit Ubuntu und nicht mit Anaconda zu sein. Ich werde überprüfen, ob es in späteren Distributionen erscheint.

    
rymac 25.05.2016 17:37
-2

Ich hatte ein ähnliches Problem bei Windows - ich löschte die PYTHONHOME Systemvariable. Ich werde versuchen, die Lösung ins Englische zu übersetzen. Mein Computer & gt; Eigenschaften & gt; Erweiterte Systemeinstellungen & gt; Umgebungsvariablen suchen Sie nach der Variable PYTHONHOME und löschen Sie sie.

    
user790300 01.02.2018 21:25

Tags und Links