Por que essa mensagem de erro do Python é gerada sempre que eu digito um comando sem sentido?

13

Sempre que eu digito qualquer comando "nonsense", essa mensagem de erro do python é gerada. Comandos normais funcionam bem. Alguma idéia de como depurar isso?

$ somenonexistingcommand
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/site.py", line 553, in <module>
    main()
  File "/usr/local/lib/python2.7/site.py", line 535, in main
    known_paths = addusersitepackages(known_paths)
  File "/usr/local/lib/python2.7/site.py", line 268, in addusersitepackages
    user_site = getusersitepackages()
  File "/usr/local/lib/python2.7/site.py", line 243, in getusersitepackages
    user_base = getuserbase() # this will also set USER_BASE
  File "/usr/local/lib/python2.7/site.py", line 233, in getuserbase
    USER_BASE = get_config_var('userbase')
  File "/usr/local/lib/python2.7/sysconfig.py", line 535, in get_config_var
    return get_config_vars().get(name)
  File "/usr/local/lib/python2.7/sysconfig.py", line 434, in get_config_vars
    _init_posix(_CONFIG_VARS)
  File "/usr/local/lib/python2.7/sysconfig.py", line 298, in _init_posix
    raise IOError(msg)
IOError: invalid Python installation: unable to open /usr/include/python2.7/pyconfig.h (No such file or directory)
$ echo this works fine, however
this works fine, however
$

EDIT - depois de consertar meu / usr / bin / python, agora recebo esta mensagem de erro diferente do Python:

$ yetanothernonexistingcommand
Traceback (most recent call last):
  File "/usr/lib/command-not-found", line 10, in <module>
    import CommandNotFound
ImportError: No module named CommandNotFound

De alguma forma, python está sendo executado sempre que eu digito errado um comando.

    
por ripper234 18.03.2011 / 19:56

6 respostas

12

Ok, isso deixa as coisas um pouco mais claras. command-not-found é um programa python, que é executado quando o seu comando não é encontrado no sistema . (Sua função é sugerir alternativas e correções em caso de erro de digitação, etc.) Veja /usr/bin/command-not-found . Ele está tentando importar o módulo CommandNotFound e não consegue, apontando claramente para uma instalação de python estragada. Eu não sou tão familiar com command-not-found , mas acho que corrigir sua instalação do Python fará com que o problema desapareça.

Só para elaborar um pouco, o que provavelmente está acontecendo é que o módulo command-not-found está localizado em algum lugar onde o python padrão não está procurando por ele. Um problema de caminho, basicamente.

Sugestões de depuração:

1) Para começar, qual é a saída de

$ which python

e a que pacote / instalação pertence esse arquivo?

2) Qual é a saída para sua instalação correspondente ao código abaixo? O caminho aqui é o caminho de importação deste python.

$ python
Python 2.6.6 (r266:84292, Dec 27 2010, 00:02:40) 
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/usr/lib/python2.6', '/usr/lib/python2.6/plat-linux2', '/usr/lib/python2.6/lib-tk', '/usr/lib/python2.6/lib-old', '/usr/lib/python2.6/lib-dynload', '/usr/local/lib/python2.6/dist-packages', '/usr/lib/python2.6/dist-packages', '/usr/lib/python2.6/dist-packages/PIL', '/usr/lib/python2.6/dist-packages/gst-0.10', '/usr/lib/pymodules/python2.6', '/usr/lib/pymodules/python2.6/gtk-2.0', '/usr/lib/python2.6/dist-packages/wx-2.8-gtk2-unicode']
    
por 18.03.2011 / 20:19
2

Eu encontrei isso quando fiz o upgrade do 2.6 que vinha com a instalação do Ubuntu para o 3.2 python, com a configuração da alternativa padrão para 3.2 em vez de 2.6.

Se você olhar para o seu arquivo /etc/bash.bashrc , há uma linha que diz para ele executar este script python para procurar alternativas nos repositórios. Existe um pacote para ele, mas você não pode remover o pacote depois de fazer o upgrade. Eu simplesmente movi o /usr/share/command-not-found e /usr/lib/command_not_found_handler e reiniciei o meu termo e ele funciona como o bom e velho bash: command not found .

    
por 04.07.2011 / 09:18
0

O problema está na sua variável de ambiente $PATH . Você provavelmente estragou tudo. Deve ser semelhante a isto:

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Veja este tópico do Linux Mint: link .

Você pode reparar seu $PATH no shell com este comando:

$ export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

Isso é temporário! Se o problema persistir com a reinicialização, provavelmente você terá usado o $PATH em um dos arquivos de configuração do ambiente em /etc .

    
por 02.06.2013 / 19:03
0

O pacote "command-not-found" é um utilitário linux; ele responde a comandos desconhecidos no prompt do shell de comando, não apenas em sessões python. (Eu vejo também há um pacote python com este nome.)

Tem python entre suas dependências, ou seja, ele usa python quando acionado; de modo que explica por que o python é invocado sempre que você digita um comando que o shell não pode encontrar no seu PATH.

Eu vejo que existe um pacote 'apt' para instalar o comando não encontrado no Linux; para Debian Debian, isso é catalogado em:

link

    
por 23.06.2015 / 20:04
0

Eu tive esse mesmo erro depois de instalar o Python 3.5.0 no meu Ubuntu 14.04 LTS (que tem um sistema python da versão 3.4.0).

Depois que eu abri o /usr/lib/command-not-found , percebi que esse erro se deve ao sistema que executa este script usando o recém-instalado python3.5.0, porque instalar o Python3.5.0 cria leads que o sistema usa quando você digita python3 .

Esse erro pode ser facilmente corrigido alterando a primeira linha de

#!/usr/bin/python3

para

#!/usr/bin/python3.4  
    
por 13.10.2015 / 08:59
0

Comentando todas as linhas responsáveis por command-not-found em /etc/bash.bashrc resolvemos o problema, que foi criado ao trocar as versões do Python.

    
por 09.04.2014 / 18:00