Erro fatal em Python: Py_Initialize: Não é possível obter a codificação de local… SyntaxError: sintaxe inválida Abortada (core dumped)

13

Eu instalei o anaconda executando o

bash Anaconda-2.2.0-Linux-x86_64.sh

comando no meu sistema Ubuntu 14.04, que foi instalado com sucesso, após o qual me pediram para exportar minha nova variável de ambiente /home/username/anaconda/bin $ PATH.

Ao fazer isso, eu pude usar todos os recursos do anaconda, incluindo os do IDE, bem como usar todos os comandos baseados em conda com sucesso.

Da próxima vez que eu inicializei meu sistema, todos os comandos com erros de digitação viram um

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)

erro. (Todos os comandos, exceto python , são específicos)

Seguindo algumas postagens stackexchange e askubuntu e também percebendo que meu $PYTHONPATH foi definido como usr/local/lib/python2.7 , tentei

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

mas isso não ajudou.

Isso me fez passar por uma saga inteira de remoções de pacotes e reinstalações, e, claro, muitas atualizações e upgrades, para tentar corrigir o problema sozinho.

conda info -a retorna:

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

O comando

which python

retorna

/home/username/anaconda/bin/python

e

echo "$PATH"

retorna

/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

Eu sei que é algo a ver com a maneira como eu configuro as variáveis path, especificamente no ~/.bashrc no qual o Anaconda prefixou automaticamente minha pasta / home / username / anaconda / bin para a variável $PATH (Isso aconteceu durante um segunda instalação do Anaconda depois que eu o removi primeiro).

Eu não modifiquei nenhuma outra variável de ambiente em ~/.profile ou ~/.bashrc .

Adicionei a linha export $ PYTHONPATH ao meu ~/.bashrc antes de reiniciar.

Todos os recursos do Anaconda funcionam agora, embora o mesmo erro Fatal Python error: Py_Initialize: Unable to get the locale encoding continue aparecendo em vez do erro de comando desconhecido comum, para a maioria dos comandos incorretos.

Vou continuar pesquisando e editando minha resposta (ou consulte as respostas existentes, se houver) assim que eu descobrir por que isso acontece.

    
por samirzach 23.06.2015 / 17:31

4 respostas

10

Eu recomendaria a desativação do PYTHONPATH. Geralmente não é necessário, e faz com que as coisas quebrem assim fazendo um Python carregar coisas de outro Python (neste caso, parece que o Python 3 do sistema está tentando carregar algo que foi escrito para o Python 2).

    
por asmeurer 24.06.2015 / 18:40
3

Eu tenho tido problemas semelhantes nos últimos dois dias, então eu o rastreei até como o bash lida com "comando não encontrado". No Ubuntu 14.04 (e no Linux Mint 17, que eu uso os scripts 14.04), o /etc/bash.bashrc tem a seguinte função:

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

No entanto, / usr / lib / command-not-found foi reescrito para o Python 3. Ele manipula o comando /etc/bash.bashrc com:

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)

Isso chama "python3" do caminho em vez de fornecer o caminho direto. Para corrigir isso, a linha 22 do / usr / lib / command-not-found deve ser alterada de

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

para

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

Isto parece ser um bug com o Ubuntu em vez do Anaconda. Verificarei se aparece nas distribuições posteriores.

    
por rymac 25.05.2016 / 17:37
1

Depois de ter instalado o python3 nos locais padrão e percebendo que eu precisava do sudo para usá-lo, instalei localmente usando isso no meu diretório home:

python3 -m venv env_py3
source env_py3/bin/activate

Mas teve mais erros. Simplesmente desativar o PYTHONPATH na instância do Amazon Linux da AWS funcionou muito bem para mim.

    
por 22.02.2019 / 10:19
-2

Eu tive um problema semelhante no windows - eu deletei a variável de sistema PYTHONHOME. Vou tentar traduzir a solução para o inglês. Meu computador > Propriedades > Configurações avançadas do sistema > Variáveis de ambiente, procure a variável PYTHONHOME e exclua-a.

    
por user790300 01.02.2018 / 21:25