Bash tenta executar python no comando desconhecido e falha em Py_Initialize

3

Rodar o Ubuntu 14.04 e o atualizador dizem que todo o software está atualizado. Já tentei reiniciar.

Estou me preparando para uma aula que usa Python. Eu instalei e funciona bem. No entanto, agora tenho esse problema: Quando eu digito um comando desconhecido no bash, recebo um erro de python:

cliff@Climate:~$ UnknownProgram

Fatal Python error: Py_Initialize: Unable to get the locale encoding
  File "/usr/lib/python2.7/encodings/__init__.py", line 123
    raise CodecRegistryError,\
                            ^
SyntaxError: invalid syntax 
Aborted

cliff@Climate:~$ env | grep -i python 
PYTHONPATH=/usr/lib/pymodules/python2.7:/usr/lib/python2.7

cliff@Climate:~$ which UnknownProgram    
cliff@Climate:~$ which python   
/usr/bin/python

cliff@Climate:~$ python --version  
Python 2.7.6

cliff@Climate:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/loc‌​al/games

Eu acho que o pycharm também instalou alguns python3 na caixa.

Eu descobri que / usr / lib / command-not-found inclui um shebang para python3. Eu acho que é de alguma forma pegar o arquivo errado Py_Initialize. Como faço para corrigir isso, pois preciso do python 2.7 para a classe?

    
por user145510 02.09.2014 / 21:17

3 respostas

2

Remover o PYTHONPATH de exportação do meu .bashrc corrigiu o problema. Agora recebo o processamento normal se eu digitar um nome de comando incorreto. Vou ter que fazer mais algumas pesquisas para ter certeza de que meu código python 2.7 está pegando os módulos corretos sem essa configuração de ambiente extra.

    
por user145510 02.09.2014 / 22:40
0

Ao usar o Python, evite colocar a configuração específica do Python em seu env de shell diretamente. Em vez disso, especifique os caminhos, as variáveis, etc. do Python dentro dos scripts do Python que você escreve e, mesmo assim, somente quando necessário.

A razão para isso é que ele permite que cada script ou programa Python chame o Python à sua maneira sem interferir ou geralmente inibir a funcionalidade de outros scripts e programas python. Neste caso em particular, você estava especificando um caminho do Python 2.7 para o shell bash usar universalmente e, ao fazê-lo, quebrou todos os programas que dependem de uma variável de ambiente Python diferente (neste caso, Python 3) e não especifica essas variáveis explicitamente.

Especificar qual versão do Python usar no início de um script Python implicitamente definirá os caminhos padrão corretos para o programa funcionar, anulando a necessidade de variáveis de ambiente explícitas do Python, como as que você definiu em seu arquivo .bashrcexport . Você pode fazer isso fazendo a primeira linha em seus scripts Python algo assim:

#!/usr/bin/python2

Por outro lado, você pode especificar o Python 3 para ser usado ao executar um script com esta linha como a primeira linha do seu script:

#!/usr/bin/python3

Você pode dar um passo adiante, especificando versões exatas do Python, se assim desejar, ou seja, :

#!/usr/bin/python2.7

ou

#!/usr/bin/python3.4

    
por MGodby 03.09.2014 / 06:18
0

Eu confirmo.

Isso acontece no sistema com o anaconda funcionando bem, quando atualizando do Ubuntu 17.4 para 17.10, onde o sistema agora usa o Python3.6. unset PYTHONHOME fez isso funcionar diretamente.

Então eu removi do meu .bashrc essa adição durante a instalação do anaconda:

export PATH=/opt/anaconda/bin:$PATH
export PYTHONHOME=/opt/anaconda/

Além disso, o python padrão ainda é python2, não é anaconda distrib, mas eu ainda posso mudar para o meu python env com python2.7,

$  source activate myenv

ou execute o /opt/anaconda/python2 , para que funcione bem, é só agora que é python3 Esse sistema depende do PYTHONHOME não é robusto para alterações nominais de env, o que é ruim na minha opinião, e não documentado sobre a instalação do anaconda, embora a solução alternativa seja fácil. nge

    
por bardouy 11.05.2018 / 10:06

Tags