Schwerwiegender Python-Fehler: Py_Initialize: Die Codierung des Gebietsschemas kann nicht abgerufen werden. SyntaxError: Ungültige Syntax Abgebrochen (Core Dump)

16

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. Danach wurde ich aufgefordert, meine neue /home/username/anaconda/binUmgebungsvariable $ PATH zu exportieren .

Dabei konnte ich alle Funktionen von Anaconda, einschließlich der IDEs, sowie alle Conda-basierten Befehle erfolgreich verwenden.

Beim nächsten Systemstart wurde bei jedem falsch eingegebenen Befehl ein angezeigt

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)

Error. (Alle Befehle außer pythonum genau zu sein)

Als ich ein paar Stackexchange- und Askubuntu-Posts verfolgte und auch bemerkte, dass ich $PYTHONPATHauf eingestellt war usr/local/lib/python2.7, versuchte ich es

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

aber es hat nicht geholfen.

Dies veranlasste mich, eine ganze Reihe von Paketerweiterungen und Neuinstallationen durchzuführen und natürlich viele Updates und Upgrades durchzuführen, um das Problem selbst zu beheben.

conda info -a kehrt 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

kehrt zurück

/home/username/anaconda/bin/python

und

echo "$PATH"

kehrt 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 und Weise zu tun , ich die Pfadvariablen gesetzt, und zwar in der ~/.bashrcin dem Anaconda mein / home automatisch vorangestellt / Benutzername / anaconda / bin - Ordner in den $PATHVariablen (Dies wurde während einer zweiten Installation von Anaconda passiert , nachdem ich es zuerst entfernt ).

Ich habe keine andere Umgebungsvariable geändert in entweder ~/.profileoder ~/.bashrc.


~/.bashrcVor dem Neustart habe ich die export $ PYTHONPATH-Zeile zu meiner hinzugefügt .

Alle Funktionen von Anaconda funktionieren jetzt, obwohl Fatal Python error: Py_Initialize: Unable to get the locale encodingfür die meisten fehlerhaften Befehle derselbe Fehler anstelle des üblichen unbekannten Befehlsfehlers angezeigt wird.

Ich werde dies weiter untersuchen und meine Antwort bearbeiten (oder auf vorhandene Antworten verweisen, falls vorhanden), sobald ich herausfinde, warum dies geschieht.

Samirzach
quelle

Antworten:

11

Ich würde empfehlen, PYTHONPATH zu deaktivieren. Es wird im Allgemeinen nicht benötigt und führt dazu, dass Dinge wie folgt unterbrochen werden, indem ein Python Dinge aus einem anderen Python lädt (in diesem Fall scheint es, als würde Python 3 des Systems versuchen, etwas zu laden, das für Python 2 geschrieben wurde).

Asmeurer
quelle
3
Aufrichtige Entschuldigung für die verspätete Antwort, Sir. Meinen Sie damit, dass Sie den PYTHONPATH jedes Mal beim Start manuell einrichten müssen? Anaconda führt derzeit Python 2.7.10 aus, und ich habe Python 3 nicht installiert. Warum wird dieser Fehler angezeigt? Der Grund, warum ich frage, ist, dass Condas Info für Benutzer-Site-Verzeichnisse die PYTHONPATH-Variable als angibt PYTHONPATH: /home/usrnme/anaconda/lib/python2.7:/usr/local/lib/python2.7. Wenn ich die Zeile PYTHONPATH: / home / usrnme / anaconda .. aus meinem ~ / .bashrc entfernen würde, würde der Fehler weiterhin bestehen, und auch keine der Funktionen von Anaconda würde funktionieren, bis ich ihn erneut einstelle.
Samirzach
3

Ich hatte in den letzten paar Tagen ähnliche Probleme, deshalb habe ich es darauf zurückgeführt, wie bash mit "Befehl nicht gefunden" umgeht. In Ubuntu 14.04 (und Linux Mint 17, das ich mit den 14.04-Skripten verwende) 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 -- $1
            return $?
        else
           return 127
        fi
    }
fi

/ Usr / lib / command-not-found wurde jedoch für Python 3 umgeschrieben. Der Befehl /etc/bash.bashrc wird verarbeitet 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)

zu

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

Dies scheint eher ein Fehler bei Ubuntu als bei Anaconda zu sein. Ich werde überprüfen, ob es in späteren Distributionen erscheint.

Rymac
quelle
1

Nachdem ich python3 an den Standardspeicherorten installiert und festgestellt habe, dass ich sudo benötige, um es zu verwenden, habe ich es lokal in meinem Ausgangsverzeichnis installiert:

python3 -m venv env_py3
source env_py3/bin/activate

Hatte aber mehr Fehler. Das einfache Deaktivieren von PYTHONPATH auf der Amazon Linux-Instanz von AWS hat mir sehr gut gefallen.

Rigger
quelle
0

Mein Problem war ein bisschen anders: Als ein Benutzer konnte ich ausführen python, aber als ein anderer Benutzer nicht (ich habe den gleichen Fehler wie OP). Schließlich fand ich heraus, dass die Berechtigungen und der Besitz von /usr/lib/python3.5 verschraubt waren. Der Grund dafür war, dass ich die Berechtigungen und den Besitz für virtualenv rekursiv festgelegt hatte, was dazu führte, dass auch die Symlink-Ziele (targetin /usr/lib/python3.5 ) geändert wurden .

Tipp: Verwenden Sie strace pythondiese Option, um herauszufinden, was beim Starten von Python passiert. Als ich es benutzte strace, konnte ich PERMISSION_DENIED auf /usr/lib/python3.5 deutlich sehen .

Juuso Ohtonen
quelle
0

Das hat bei mir funktioniert

/programming//a/39097003/823282

rm -rf venv
virtualenv -p /usr/bin/python3 venv/
source venv/bin/activate
pip install -r requirements.txt
Activedecay
quelle
-3

Ich hatte ein ähnliches Problem unter Windows - Ich habe die Systemvariable PYTHONHOME gelöscht. Ich werde versuchen, die Lösung ins Englische zu übersetzen. Arbeitsplatz> Eigenschaften> Erweiterte Systemeinstellungen> Umgebungsvariablen, suchen Sie die Variable PYTHONHOME und löschen Sie sie.

user790300
quelle