¿Por qué se genera este mensaje de error de Python cada vez que escribo un comando sin sentido?

16

Cada vez que escribo cualquier comando "sin sentido", se genera este mensaje de error de Python. Los comandos normales funcionan bien. ¿Alguna idea de cómo depurar esto?

$ 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
$

EDITAR : después de arreglar mi / usr / bin / python, ahora recibo este mensaje de error diferente de 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 alguna manera, python se ejecuta cada vez que escribo mal un comando.

ripper234
fuente
1
@ripper: Interesante. Algunas observaciones perdidas. ¿Su .bashrc tiene algo relacionado con Python? ¿Obtiene este mismo comportamiento con otras cuentas de usuario? ¿Por qué tienes Python 2.7 instalado localmente? ¿Cuál es el pitón oficial predeterminado en esta instalación? Si no es 2.7, ¿lo tiene instalado? ¿Qué versión de ubuntu es esta?
Faheem Mitha
@ Faheem: no veo nada relacionado con Python en .bashrc. Instalé python localmente yo mismo. Sé que la máquina también tiene otras dos pitones instaladas. Tengo Ubuntu 10.10 instalado.
ripper234
Esto huele un poco a una instalación de Python que se ha perdido. ¿Cuáles son las versiones oficiales del sistema pitones instalados y por qué instaló 2.7 localmente? ¿No es una de las versiones disponibles oficialmente?
Faheem Mitha
@ Faheem: no entiendo tu pregunta. ¿Qué quieres decir con "oficial"? Necesitaba Python 2.7, así que lo instalé. Soy el administrador de este cuadro. Instalé python haciendo make / make install, no hice nada sospechoso (creo).
ripper234
@ripper: Significado, ubuntu lo proporcionó como un paquete binario. Cuando escribes python, ¿qué pitón obtienes?
Faheem Mitha

Respuestas:

12

Ok, eso aclara un poco las cosas. command-not-foundes un programa de Python, que se ejecuta cuando su comando no se encuentra en el sistema. (Su función es sugerir alternativas y correcciones en caso de escribir mal, etc.) Ver /usr/bin/command-not-found. Está intentando importar el CommandNotFoundmódulo y no puede hacerlo, apuntando claramente a una instalación de Python arruinada. No estoy tan familiarizado command-not-found, pero creo que arreglar la instalación de Python hará que el problema desaparezca.

Solo para explicar un poco, lo que probablemente esté sucediendo es que el command-not-foundmódulo se encuentra en algún lugar donde su python predeterminado no lo está buscando. Un problema de ruta, básicamente.

Sugerencias de depuración:

1) Para empezar, ¿cuál es la salida de

$ which python

¿Y a qué paquete / instalación pertenece ese archivo?

2) ¿Cuál es el resultado de su instalación correspondiente al código a continuación? El camino aquí es el camino de importación de este pitón.

$ 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']
Faheem Mitha
fuente
1
Una posible solución es # apt-get remove command-not-found...
Simon
"Instalación de Python atornillada": cualquier idea de lo que falta exactamente. ¿CommandNotFound es un módulo central de Python, o puedo / debo instalarlo por separado?
ripper234
@ripper: CommandNotFound es parte del paquete de comando no encontrado , que ya debe estar instalado en su máquina, de lo contrario no vería este mensaje. Sin embargo, puede verificarlo fácilmente consultando al administrador de paquetes. dpkg -l comando-no-encontrado. Su problema es que su instalación de python predeterminada no está viendo este módulo. Agregaré algunos pasos para depurar arriba. Otros, por favor, siéntase libre de modificar y corregir.
Faheem Mitha
Vea esta pregunta de seguimiento: unix.stackexchange.com/questions/9711/…
ripper234
los enlaces command-not-foundparecen estar rotos (aunque es difícil saber si "error" es el resultado esperado cuando se busca "comando no encontrado" ...)
Nikana Reklawyks
2

Me encontré con esto cuando actualicé desde el stock 2.6 que vino con mi instalación de ubuntu a la python 3.2, con la configuración de la alternativa predeterminada a 3.2 en lugar de 2.6.

Si observa su /etc/bash.bashrcarchivo, hay una línea que le indica que ejecute este script de Python para buscar alternativas en los repositorios. Hay un paquete para él, sin embargo, no puede eliminar el paquete una vez que lo haya actualizado. Yo simplemente moví la /usr/share/command-not-foundy /usr/lib/command_not_found_handler, y reinicia el plazo y funciona como una buena fiesta ol': command not found.

RoboticGolem
fuente
66
Si desea deshabilitar el command_not_foundcontrolador, no se meta /usr(eso puede hacer que las actualizaciones posteriores fallen o se deshagan con las actualizaciones posteriores). En cambio, cambie /etc/bash.bashrc. O deshabilite esto por su cuenta ~/.bashrccon unset -f command_not_found_handle.
Gilles 'SO- deja de ser malvado'
En particular, /etc/bash.bashrces proporcionado por el bashpaquete, por lo que podría romper las actualizaciones de ese paquete.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
2

Tuve este mismo error después de instalar Python 3.5.0 en mi Ubuntu 14.04 LTS (que tiene un sistema python de la versión 3.4.0).

Después de abrir el /usr/lib/command-not-found, me di cuenta de que este error se debe a que el sistema ejecutó este script usando el nuevo python3.5.0 instalado, porque la instalación de Python3.5.0 crea el sistema para que lo use cuando escribe python3.

Este error se puede corregir fácilmente cambiando la primera línea de

#!/usr/bin/python3

a

#!/usr/bin/python3.4  
usuario3667217
fuente
Esta es la mejor respuesta de la OMI. En mi caso fue una decisión estúpida vincular python3 a una versión menor más nueva, pensando que la compatibilidad no debería romperse. Pero sí, la lección aprendida.
Guybrush Threepwood
0

El problema es con su $PATHvariable de entorno. Lo más probable es que lo hayas estropeado. Debería ser similar a esto:

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

Vea este hilo de Linux Mint: http://forums.linuxmint.com/viewtopic.php?f=18&t=119561 .

Puede reparar su $PATHen el shell con este comando:

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

¡Esto es temporal! Si el problema persiste con un reinicio, lo más probable es que haya alojado $PATHen uno de los archivos de configuración de su entorno /etc.

slm
fuente
0

El paquete "comando no encontrado" es una utilidad de Linux; responde a comandos desconocidos en el indicador de comandos, no solo dentro de las sesiones de Python. (Veo que también hay un paquete de Python con este nombre).

Tiene python entre sus dependencias, es decir, usa python cuando se activa; así que eso explica por qué se invoca python cada vez que escribe un comando que el shell no puede encontrar en su RUTA.

Veo que hay un paquete 'apto' para instalar el comando no encontrado en Linux; para Debian Linux, esto está catalogado en:

https://packages.debian.org/sid/admin/command-not-found

usuario312543
fuente
0

Al comentar todas las líneas responsable de command-not-founden /etc/bash.bashrcresolver el problema, el cual fue creado por el cambio versiones de Python.

usuario64802
fuente