Ilekroć wpisuję dowolne polecenie „nonsens”, generowany jest ten komunikat o błędzie python. Normalne polecenia działają dobrze. Masz pomysł, jak to debugować?
$ 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
$
EDYCJA - po naprawieniu mojego / usr / bin / python, otrzymuję teraz inny komunikat o błędzie python:
$ yetanothernonexistingcommand
Traceback (most recent call last):
File "/usr/lib/command-not-found", line 10, in <module>
import CommandNotFound
ImportError: No module named CommandNotFound
Jakoś python jest uruchamiany za każdym razem, gdy błędnie wpisuję polecenie.
Odpowiedzi:
Ok, to sprawia, że wszystko jest trochę jaśniejsze.
command-not-found
to program w języku Python, który działa, gdy twoje polecenie nie znajduje się w systemie. (Jego funkcją jest sugerowanie alternatyw i poprawek w przypadku pomyłki itp.) Patrz/usr/bin/command-not-found
. Próbuje zaimportowaćCommandNotFound
moduł, ale nie jest w stanie tego zrobić, wyraźnie wskazując na zepsutą instalację Pythona. Nie znam się tak dobrzecommand-not-found
, ale myślę, że naprawienie instalacji Pythona rozwiąże problem.Aby to nieco rozwinąć, prawdopodobnie dzieje się tak, że
command-not-found
moduł znajduje się w miejscu, gdzie domyślny python go nie szuka. Zasadniczo problem ze ścieżką.Sugestie debugowania:
1) Na początek, z czego pochodzi wyjście
i do jakiego pakietu / instalacji należy ten plik?
2) Jakie dane wyjściowe dla Twojej instalacji odpowiadają poniższemu kodowi? Ścieżka tutaj jest ścieżką importu tego pytona.
źródło
# apt-get remove command-not-found
...command-not-found
wydają się uszkodzone (chociaż trudno powiedzieć, czy „błąd” jest oczekiwanym rezultatem przy wyszukiwaniu „komendy nie znaleziono” ...)Natknąłem się na to, kiedy zaktualizowałem z wersji 2.6 dostarczonej wraz z moją instalacją ubuntu do Pythona 3.2, ustawiając domyślną alternatywę na 3.2 zamiast 2.6.
Jeśli spojrzysz na swój
/etc/bash.bashrc
plik, jest wiersz, który mówi mu, aby uruchomił ten skrypt Pythona, aby szukać alternatyw w repozytoriach. Jest do tego pakiet, jednak nie można go usunąć po aktualizacji. Ja po prostu przeniósł/usr/share/command-not-found
a/usr/lib/command_not_found_handler
i ponownie mój termin i działa jak dobry ol”bash:command not found
.źródło
command_not_found
moduł obsługi, nie zadzieraj z/usr
(może to spowodować, że kolejne aktualizacje zakończą się niepowodzeniem lub zostaną cofnięte przez kolejne aktualizacje). Zamiast tego zmień/etc/bash.bashrc
. Lub wyłącz to we własnym zakresie za~/.bashrc
pomocąunset -f command_not_found_handle
./etc/bash.bashrc
jest dostarczany przezbash
pakiet, więc możesz złamać aktualizacje tego pakietu.Miałem ten sam błąd po zainstalowaniu Python 3.5.0 na moim Ubuntu 14.04 LTS (który ma systemowy python w wersji 3.4.0).
Po otwarciu
/usr/lib/command-not-found
zdałem sobie sprawę, że ten błąd jest spowodowany przez system wykonujący ten skrypt za pomocą nowo zainstalowanego Python3.5.0, ponieważ instalacja Python3.5.0 powoduje, że system używa go podczas wpisywaniapython3
.Ten błąd można łatwo naprawić, zmieniając pierwszy wiersz z
do
źródło
Problem dotyczy
$PATH
zmiennej środowiskowej. Najprawdopodobniej to popsułeś. Powinien być podobny do tego:Zobacz ten wątek Linux Mint: http://forums.linuxmint.com/viewtopic.php?f=18&t=119561 .
Możesz naprawić swój
$PATH
w powłoce za pomocą tego polecenia:To jest tymczasowe! Jeśli problem będzie się powtarzał przy ponownym uruchomieniu, najprawdopodobniej ukryłeś
$PATH
w jednym z plików instalacyjnych swojego środowiska pod/etc
.źródło
Pakiet „Command-not-found” jest narzędziem linux; odpowiada na nieznane polecenia w wierszu poleceń, nie tylko w sesjach Pythona. (Widzę, że istnieje również pakiet python o tej nazwie).
Ma między sobą Pythona, tzn. Używa Pythona po uruchomieniu; więc wyjaśnia, dlaczego python jest wywoływany za każdym razem, gdy wpiszesz polecenie, którego powłoka nie może znaleźć na twojej ŚCIEŻCE.
Widzę, że istnieje pakiet „apt” do zainstalowania polecenia nieznalezionego w Linuksie; dla systemu Linux Debian jest to skatalogowane pod adresem:
https://packages.debian.org/sid/admin/command-not-found
źródło
Komentując wszystkie linie odpowiedzialne za
command-not-found
w/etc/bash.bashrc
rozwiązał problem, który został stworzony przez przełączanie wersji Pythona.źródło