Mengapa pesan kesalahan python ini dihasilkan setiap kali saya mengetik perintah omong kosong?

16

Setiap kali saya mengetik perintah "omong kosong", pesan kesalahan python ini dihasilkan. Perintah normal berfungsi dengan baik. Adakah yang tahu cara men-debug ini?

$ 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 - setelah memperbaiki / usr / bin / python saya, saya sekarang mendapatkan pesan kesalahan python yang berbeda ini:

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

Entah bagaimana, python sedang dijalankan setiap kali saya salah ketik perintah.

ripper234
sumber
1
@ripper: Menarik. Beberapa pengamatan menyimpang. Apakah .bashrc Anda terhubung dengan python? Apakah Anda mendapatkan perilaku yang sama dengan akun pengguna lain? Mengapa Anda menginstal python 2.7 secara lokal? Apa python resmi default pada instalasi ini, dan jika tidak 2.7, apakah Anda sudah menginstalnya? Versi ubuntu apa ini?
Faheem Mitha
@Faheem - Saya tidak melihat python apa pun yang terkait dengan .bashrc. Saya menginstal python secara lokal sendiri. Saya tahu mesin memiliki dua ular sanca lainnya yang diinstal juga. Saya sudah menginstal Ubuntu 10.10.
ripper234
Baunya sedikit seperti instalasi python yang tersesat. Apa versi ular sanca sistem resmi yang diinstal, dan mengapa Anda menginstal 2,7 secara lokal? Apakah ini bukan salah satu versi resmi yang tersedia?
Faheem Mitha
@ Faheem - Saya tidak mengerti pertanyaan Anda. Apa yang Anda maksud dengan "resmi"? Saya membutuhkan python 2.7, jadi saya menginstalnya. Saya adalah admin kotak ini. Saya menginstal python dengan melakukan make / make install, tidak melakukan apa pun yang mencurigakan (saya pikir).
ripper234
@ripper: Artinya, ubuntu menyediakannya sebagai paket biner. Saat Anda mengetikkan python, python apa yang Anda dapat?
Faheem Mitha

Jawaban:

12

Ok, itu membuat segalanya sedikit lebih jelas. command-not-foundadalah program python, yang berjalan ketika perintah Anda bukan sesuatu yang ditemukan pada sistem. (Fungsinya untuk menyarankan alternatif dan koreksi jika terjadi kesalahan ketik dll.) Lihat/usr/bin/command-not-found . Ia mencoba mengimpor CommandNotFoundmodul dan tidak dapat, dengan jelas menunjuk ke instalasi python yang kacau. Saya tidak familiar dengan itu command-not-found, tapi saya pikir memperbaiki instalasi Python Anda akan membuat masalah hilang.

Hanya untuk menguraikan sedikit, apa yang mungkin terjadi adalah bahwa command-not-found modul terletak di suatu tempat di mana python default Anda tidak mencarinya. Masalah jalur, pada dasarnya.

Saran debug:

1) Untuk mulai dengan, dari mana output

$ which python

dan apa paket / instalasi milik file itu?

2) Apa output untuk instalasi Anda yang sesuai dengan kode di bawah ini? Path di sini adalah path import python ini.

$ 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
sumber
1
salah satu solusi yang mungkin adalah # apt-get remove command-not-found...
simon
"Instalasi python kacau" - tahu apa yang sebenarnya hilang. Apakah CommandNotFound adalah modul python inti, atau dapatkah saya menginstalnya secara terpisah?
ripper234
@ripper: CommandNotFound adalah bagian dari paket command-not-found , yang harus sudah diinstal pada mesin Anda, kalau tidak Anda tidak akan melihat pesan ini. Namun, Anda dapat dengan mudah memverifikasi itu dengan menanyakan manajer paket. dpkg -l perintah-tidak-ditemukan. Masalah Anda adalah bahwa instalasi python default Anda tidak melihat modul ini. Saya akan menambahkan beberapa langkah untuk debug di atas. Yang lain silakan memodifikasi & memperbaiki.
Faheem Mitha
Lihat pertanyaan lanjutan ini - unix.stackexchange.com/questions/9711/...
ripper234
tautan ke command-not-found tampaknya rusak (meskipun sulit untuk mengetahui apakah "kesalahan" adalah hasil yang diharapkan saat mencari "perintah-tidak-ditemukan" ...)
Nikana Reklawyks
2

Saya mengalami hal ini ketika saya memutakhirkan dari stock 2.6 yang datang dengan instalasi ubuntu saya ke python 3.2, dengan menetapkan alternatif default ke 3.2 daripada 2.6.

Jika Anda melihat /etc/bash.bashrcfile Anda, ada baris yang memberitahukannya untuk menjalankan skrip python ini untuk mencari alternatif dalam repo. Ada paket untuk itu, namun Anda tidak dapat menghapus paket setelah Anda memutakhirkan. Aku hanya cukup memindahkan /usr/share/command-not-founddan /usr/lib/command_not_found_handlerdan restart istilah saya dan bekerja seperti baik ol' bash: command not found.

RoboticGolem
sumber
6
Jika Anda ingin menonaktifkan command_not_foundhandler, jangan main-main dengan /usr(yang dapat membuat pemutakhiran berikutnya gagal atau dibatalkan dengan pemutakhiran berikutnya). Sebaliknya, ubahlah /etc/bash.bashrc. Atau menonaktifkan ini dalam Anda sendiri ~/.bashrcdengan unset -f command_not_found_handle.
Gilles 'SANGAT berhenti menjadi jahat'
Khususnya, /etc/bash.bashrcdisediakan oleh bashpaket, sehingga Anda dapat memutus pembaruan untuk paket itu.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
2

Saya mengalami kesalahan yang sama ini setelah menginstal Python 3.5.0 pada Ubuntu 14.04 LTS saya (yang memiliki sistem python versi 3.4.0).

Setelah saya membuka /usr/lib/command-not-found , saya menyadari kesalahan ini adalah karena sistem mengeksekusi skrip ini menggunakan python3.5.0 yang baru diinstal, karena menginstal Python3.5.0 menciptakan mengarah sistem untuk menggunakannya ketika Anda mengetikpython3 .

Kesalahan ini dapat dengan mudah diperbaiki dengan mengubah baris pertama dari

#!/usr/bin/python3

untuk

#!/usr/bin/python3.4  
pengguna3667217
sumber
Ini jawaban imo terbaik. Dalam kasus saya itu adalah keputusan bodoh untuk menyinkronkan python3 ke versi minor yang lebih baru, berpikir kompatibilitas tidak boleh rusak. Tapi ya, pelajaran bisa dipetik.
Guybrush Threepwood
0

Masalahnya adalah dengan $PATHvariabel lingkungan Anda . Anda kemungkinan besar telah mengacaukannya. Seharusnya mirip dengan ini:

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

Lihat utas Linux Mint ini: http://forums.linuxmint.com/viewtopic.php?f=18&t=119561 .

Anda dapat memperbaiki $PATHshell Anda dengan perintah ini:

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

Ini sementara! Jika masalah berlanjut dengan reboot maka kemungkinan besar Anda telah menyembunyikannya $PATHdi salah satu file pengaturan lingkungan di bawah /etc.

slm
sumber
0

Paket "command-not-found" adalah utilitas linux; ia merespons perintah yang tidak dikenal pada prompt perintah shell, tidak hanya dalam sesi python. (Saya melihat ada juga paket python dari nama ini.)

Ini memiliki python di antara dependensinya, yaitu menggunakan python ketika dipicu; sehingga menjelaskan mengapa python dipanggil kapan pun Anda mengetik perintah yang shell tidak dapat temukan di PATH Anda.

Saya melihat ada paket 'apt' untuk menginstal perintah-tidak-ditemukan di Linux; untuk Debian linux, ini dikatalogkan di:

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

pengguna312543
sumber
0

Mengomentari semua baris yang bertanggung jawab command-not-founddalam /etc/bash.bashrcmenyelesaikan masalah, yang dibuat dengan mengganti versi Python.

pengguna64802
sumber