Errore fatale Python: Py_Initialize: impossibile ottenere la codifica locale ... SyntaxError: sintassi non valida Aborted (core dumped)

12

Ho installato anaconda eseguendo il

bash Anaconda-2.2.0-Linux-x86_64.sh

sul mio sistema Ubuntu 14.04, installato con successo, dopo di che mi è stato chiesto di esportare la mia nuova variabile d'ambiente /home/username/anaconda/bin $ PATH.

Così facendo, sono stato in grado di utilizzare tutte le funzionalità di anaconda, inclusi gli IDE, oltre a utilizzare con successo tutti i comandi basati su conda.

La prossima volta che ho avviato il mio sistema, ogni comando con errori di battitura ha visto 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)

errore. (Tutti i comandi tranne python per essere specifici)

Seguendo alcuni post di stackexchange e askubuntu e notando anche che il mio $PYTHONPATH era stato impostato su usr/local/lib/python2.7 , ho provato a

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

ma non ha aiutato.

Questo mi ha fatto passare attraverso un'intera saga di rimozioni e reinstallazione di pacchetti e, naturalmente, un sacco di aggiornamenti e aggiornamenti, per cercare di risolvere il problema da solo.

conda info -a restituisce:

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

Il comando

which python

ritorna

/home/username/anaconda/bin/python

e

echo "$PATH"

ritorna

/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

So che ha a che fare con il modo in cui imposto le variabili del percorso, in particolare in ~/.bashrc in cui Anaconda ha anteposto automaticamente la mia cartella / home / username / anaconda / bin alla variabile $PATH (ciò è accaduto durante un seconda installazione di Anaconda dopo averla rimossa prima).

Non ho modificato nessuna altra variabile di ambiente in ~/.profile o ~/.bashrc .

Ho aggiunto la riga $ PYTHONPATH di esportazione al mio ~/.bashrc prima di riavviare.

Tutte le funzionalità di Anaconda funzionano ora, anche se lo stesso errore di Fatal Python error: Py_Initialize: Unable to get the locale encoding continua a essere visualizzato al posto del solito errore di comando sconosciuto, per la maggior parte dei comandi inesatti.

Continuerò a esaminare questo aspetto e a modificare la mia risposta (o fare riferimento alle risposte esistenti, se presenti) non appena scoprirò perché questo accade.

    
posta samirzach 23.06.2015 - 17:31

3 risposte

9

Consiglierei di disabilitare PYTHONPATH. Generalmente non è necessario, e fa sì che le cose si rompano in questo modo facendo in modo che un Python carichi cose da un altro Python (in questo caso, sembra che il sistema Python 3 stia cercando di caricare qualcosa che è stato scritto per Python 2).

    
risposta data asmeurer 24.06.2015 - 18:40
3

Ho avuto problemi simili negli ultimi due giorni, quindi ho risalito al modo in cui maniglie bash "comando non trovato". In Ubuntu 14.04 (e Linux Mint 17, che utilizzo gli script 14.04), /etc/bash.bashrc ha la seguente funzione:

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

Tuttavia, / usr / lib / command-not-found è stato riscritto per Python 3. Gestisce il comando /etc/bash.bashrc con:

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)

Questo chiama "python3" dal percorso piuttosto che dare il percorso diretto. Per correggere ciò, la riga 22 di / usr / lib / command-not-found dovrebbe essere modificata da

os.execvp("python3", [sys.argv[0]] + sys.argv)

a

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

Questo sembra essere un bug con Ubuntu piuttosto che Anaconda. Controllerò per vedere se appare nelle distribuzioni successive.

    
risposta data rymac 25.05.2016 - 17:37
-2

Ho avuto un problema simile su Windows - Ho cancellato la variabile di sistema PYTHONHOME. Proverò a tradurre la soluzione in inglese. Il mio computer & gt; Proprietà & gt; Impostazioni di sistema avanzate & gt; Variabili d'ambiente, cerca la variabile PYTHONHOME ed eliminala.

    
risposta data user790300 01.02.2018 - 21:25

Leggi altre domande sui tag