Perché questo messaggio di errore di Python viene generato ogni volta che si digita un comando senza senso?


16

Ogni volta che digito un comando "senza senso", viene generato questo messaggio di errore di Python. I comandi normali funzionano bene. Qualche idea su come eseguire il debug di questo?

$ 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 - dopo aver corretto il mio / usr / bin / python, ora ricevo questo diverso messaggio di errore di Python:

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

In qualche modo, Python viene eseguito ogni volta che digito male un comando.


1
@ripper: interessante. Alcune osservazioni vaganti. Il tuo .bashrc ha qualcosa connesso con Python? Hai questo stesso comportamento con altri account utente? Perché hai installato Python 2.7 localmente? Qual è il pitone ufficiale predefinito su questa installazione e, se non 2.7, lo hai installato? Quale versione di Ubuntu è questa?
Faheem Mitha,

@Faheem - Non vedo nulla di simile a Python in .bashrc. Ho installato Python localmente da solo. So che la macchina ha anche altri due pitoni installati. Ho Ubuntu 10.10 installato.
ripper234,

Questo puzza un po 'come un'installazione di Python andata fuori strada. Quali sono le versioni dei sistemi ufficiali pitone installati e perché hai installato 2.7 localmente? Non è una delle versioni ufficialmente disponibili?
Faheem Mitha,

@Faheem - Non capisco la tua domanda. Cosa intendi con "ufficiale"? Avevo bisogno di Python 2.7, quindi l'ho installato. Sono l'amministratore di questa scatola. Ho installato Python facendo make / make install, non ho fatto nulla di strano (credo).
ripper234,

@ripper: Significato, Ubuntu lo ha fornito come pacchetto binario. Quando digiti python, quale python ottieni?
Faheem Mitha,

Risposte:


12

Ok, questo rende le cose un po 'più chiare. command-not-foundè un programma Python, che viene eseguito quando il comando non è presente nel sistema. (La sua funzione è quella di suggerire alternative e correzioni in caso di errori di digitazione ecc.) Vedi /usr/bin/command-not-found. Sta cercando di importare il CommandNotFoundmodulo e non è in grado di farlo, indicando chiaramente un'installazione di Python rovinata. Non sono così familiare command-not-found, ma penso che riparare l'installazione di Python risolverà il problema.

Solo per elaborare un po ', ciò che sta probabilmente accadendo è che il command-not-foundmodulo si trova da qualche parte in cui il tuo Python predefinito non lo sta cercando. Un problema di percorso, in sostanza.

Suggerimenti di debug:

1) Per cominciare, da cosa proviene l'output

$ which python

e a cosa appartiene quel pacchetto / installazione?

2) Qual è l'output per la tua installazione corrispondente al codice qui sotto? Il percorso qui è il percorso di importazione di questo pitone.

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

1
una possibile soluzione è # apt-get remove command-not-found...
simon

"Installazione di Python rovinata" - qualsiasi idea di cosa manchi esattamente. CommandNotFound è un modulo core di Python o posso / devo installarlo separatamente?
ripper234

@ripper: CommandNotFound fa parte del pacchetto command-not-found , che deve essere già installato sul tuo computer, altrimenti non visualizzerai questo messaggio. Tuttavia, è possibile verificarlo facilmente eseguendo una query sul gestore pacchetti. dpkg -l comando non trovato. Il tuo problema è che l'installazione di Python predefinita non vede questo modulo. Aggiungerò alcuni passaggi per il debug sopra. Altri non esitate a modificare e correggere.
Faheem Mitha,

Vedi questa domanda di follow-up - unix.stackexchange.com/questions/9711/…
ripper234

i collegamenti command-not-foundsembrano spezzati (anche se è difficile dire se "errore" è il risultato atteso quando si cerca "comando non trovato" ...)
Nikana Reklawyks,

2

Mi sono imbattuto in questo quando ho aggiornato dalla versione 2.6 fornita con la mia installazione di Ubuntu al 3.2 python, con l'impostazione dell'alternativa predefinita a 3.2 anziché a 2.6.

Se guardi il tuo /etc/bash.bashrcfile c'è una riga che dice di eseguire questo script Python per cercare alternative nei repository. È disponibile un pacchetto, tuttavia non è possibile rimuoverlo dopo l'aggiornamento. Ho semplicemente spostato la /usr/share/command-not-founde /usr/lib/command_not_found_handlered ho ricominciato il mio mandato e funziona come il buon vecchio bash': command not found.


6
Se si desidera disabilitare il command_not_foundgestore, non scherzare /usr(ciò può far fallire gli aggiornamenti successivi o essere annullato dagli aggiornamenti successivi). Invece, cambia /etc/bash.bashrc. O disabilita questo da solo ~/.bashrccon unset -f command_not_found_handle.
Gilles 'SO- smetti di essere malvagio' il

In particolare, /etc/bash.bashrcviene fornito dal bashpacchetto, quindi è possibile interrompere gli aggiornamenti a quel pacchetto.
Ciro Santilli 24 改造 中心 法轮功 六四 事件

2

Ho avuto lo stesso errore dopo aver installato Python 3.5.0 sul mio Ubuntu 14.04 LTS (che ha un sistema Python della versione 3.4.0).

Dopo aver aperto il /usr/lib/command-not-found, mi sono reso conto che questo errore è dovuto al sistema che esegue questo script usando il python3.5.0 appena installato, perché l'installazione di Python3.5.0 crea porta il sistema a usarlo quando si digitapython3 .

Questo errore può essere facilmente corretto cambiando la prima riga da

#!/usr/bin/python3

per

#!/usr/bin/python3.4  

Questa è la migliore risposta imo. Nel mio caso è stata una stupida decisione di collegare sympython3 a una versione minore più recente, pensando che la compatibilità non dovesse rompersi. Ma sì, lezione imparata.
Guybrush Threepwood,

0

Il problema riguarda la $PATHvariabile di ambiente. Molto probabilmente l'hai incasinato. Dovrebbe essere simile a questo:

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

Vedi questo thread di Linux Mint: http://forums.linuxmint.com/viewtopic.php?f=18&t=119561 .

Puoi riparare il tuo $PATHnella shell con questo comando:

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

Questo è temporaneo! Se il problema persiste con un riavvio, molto probabilmente hai nascosto il file $PATHin uno dei file di installazione dell'ambiente in /etc.


0

Il pacchetto "comando non trovato" è un'utilità linux; risponde a comandi sconosciuti al prompt della shell dei comandi, non solo nelle sessioni di Python. (Vedo che esiste anche un pacchetto Python con questo nome.)

Ha Python tra le sue dipendenze, cioè usa Python quando attivato; in modo che spieghi perché Python viene invocato ogni volta che digiti un comando che la shell non riesce a trovare sul tuo PERCORSO.

Vedo che esiste un pacchetto 'apt' per installare il comando non trovato in Linux; per Linux Debian, questo è catalogato su:

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


0

Commentando tutte le righe responsabili command-not-founddella /etc/bash.bashrcrisoluzione del problema, che è stato creato cambiando le versioni di Python.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.