Saçma bir komut yazdığımda bu python hata iletisi neden oluşturuluyor?


17

Ne zaman bir "saçmalık" komut yazdığımda, bu python hata mesajı oluşturulur. Normal komutlar iyi çalışır. Bu hata ayıklama fikri var mı?

$ 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 - benim / usr / bin / python düzelttikten sonra, şimdi bu farklı python hata iletisini alıyorum:

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

Her nasılsa, bir komutu yanlış yazdığımda python çalıştırılıyor.


1
@ripper: İlginç. Birkaç başıboş gözlem. .Bashrc'nizde python ile bağlantılı bir şey var mı? Aynı davranışı diğer kullanıcı hesaplarıyla da alıyor musunuz? Neden yerel olarak python 2.7 yüklüyorsunuz? Bu kurulumdaki varsayılan resmi python nedir ve 2.7 değilse, kurmuş musunuz? Bu hangi ubuntu versiyonu?
Faheem Mitha

@Faheem - .bashrc ile ilgili bir şey görmüyorum. Yerel olarak python kurdum. Makinede başka iki piton daha yüklü olduğunu biliyorum. Ubuntu 10.10 yükledim.
18:11

Bu biraz python kurulumuna sapmış gibi kokuyor. Resmi sistem pitonlarının kurulu sürümleri nelerdir ve neden yerel olarak 2.7 yüklediniz? Resmi olarak mevcut sürümlerden biri değil mi?
Faheem Mitha

@Faheem - Sorunu anlamıyorum. "Resmi" ile ne demek istiyorsun? Python 2.7'ye ihtiyacım vardı, bu yüzden kurdum. Ben bu kutunun yöneticisiyim. Make / make install yaparak python yükledim, sanırım balık gibi bir şey yapmadı.
18:11

@ripper: Anlamı, ubuntu bunu ikili paket olarak sağladı. Python yazdığınızda hangi python'u alıyorsunuz?
Faheem Mitha

Yanıtlar:


13

Tamam, bu işleri biraz daha açık hale getiriyor. command-not-foundkomutunuz sistemde bulunan bir şey olmadığında çalışan bir python programıdır. (İşlevi, buğulanma gibi durumlarda alternatifler ve düzeltmeler önermektir.) Bkz /usr/bin/command-not-found. CommandNotFoundModülü içe aktarmaya çalışıyor ve açık bir şekilde vidalanmış bir python kurulumuna işaret edemiyor. Ben o familar değilim command-not-found, ama bence Python kurulumunu düzeltmek sorunu ortadan kaldıracaktır.

Sadece biraz ayrıntılı olarak, muhtemelen olan şey, command-not-foundmodülün varsayılan python'unuzun aradığı bir yerde bulunmasıdır. Temel olarak bir yol sorunu.

Hata ayıklama önerileri:

1) Başlangıç ​​olarak, çıktı ne

$ which python

ve bu dosya neye / pakete ait?

2) Kurulumunuz için aşağıdaki koda karşılık gelen çıktı nedir? Buradaki yol, bu python'un içe aktarma yoludur.

$ 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
olası bir çözüm # apt-get remove command-not-found...
simon

"Vidalı python kurulumu" - tam olarak ne eksik herhangi bir fikir. CommandNotFound bir çekirdek python modülü mü yoksa ayrı olarak kurabilir miyim / yapmalıyım?
19:11

@ripper: CommandNotFound , makinenize zaten yüklenmesi gereken komut bulunamadı paketinin bir parçasıdır , aksi takdirde bu mesajı görmezsiniz. Ancak, paket yöneticisini sorgulayarak bunu kolayca doğrulayabilirsiniz. dpkg -l komutu bulunamadı. Sorun, varsayılan python yüklemeniz bu modülü görmüyor olmasıdır. Yukarıdaki hata ayıklamaya bazı adımlar ekleyeceğim. Diğerleri değiştirmek ve düzeltmek için çekinmeyin.
Faheem Mitha


bağlantılar command-not-foundkopmuş gibi görünüyor ("komut bulunamadı" için arama yaparken "hata" nın beklenen sonuç olup olmadığını söylemek zor olsa da) ...
Nikana Reklawyks

3

Aynı hata benim Ubuntu 14.04 LTS (sürüm 3.4.0 bir sistem python vardır) üzerine yükledikten sonra da vardı.

Açtıktan sonra /usr/lib/command-not-found, bu hatanın, yeni yüklenen python3.5.0 kullanarak bu komut dosyasının yürütülmesinden kaynaklandığını fark ettim, çünkü Python3.5.0'ın yüklenmesi, yazarken kullanmak için sistemi açar python3.

Bu hata ilk satırı değiştirerek kolayca düzeltilebilir.

#!/usr/bin/python3

için

#!/usr/bin/python3.4  

Bu en iyi cevap imo. Benim durumumda, python3'ü daha yeni bir küçük sürüme symlink etmek aptalca bir karardı, uyumluluk kırılmamalı. Ama evet, ders öğrenildi.
Guybrush Threepwood

2

Ubuntu kurulumumla gelen stok 2.6'dan 3.2 python'a yükselttiğimde, varsayılan alternatifi 2.6 yerine 3.2'ye ayarladım.

Eğer bakarsanız /etc/bash.bashrcdosyasında depolarındakii alternatifler aramak için bu python komut çalıştırmak için bunu söyleyen bir çizgi vardır. Bunun için bir paket var, ancak yükselttikten sonra paketi kaldıramazsınız. Ben sadece basitçe taşındı /usr/share/command-not-foundve /usr/lib/command_not_found_handlerbenim terimini yeniden ve iyi ol' bash gibi çalışır: command not found.


6
command_not_foundİşleyiciyi devre dışı bırakmak istiyorsanız, uğraşmayın /usr(sonraki yükseltmelerin başarısız olmasına veya sonraki yükseltmelerin geri alınmasına neden olabilir). Bunun yerine değiştirin /etc/bash.bashrc. Veya ~/.bashrcile kendi başınıza devre dışı bırakın unset -f command_not_found_handle.
Gilles 'SO- kötü olmayı bırak'

Özellikle, paket /etc/bash.bashrctarafından sağlanır bash, böylece paketin güncellemelerini bozabilirsiniz.
Ciro Santilli 事件 改造 中心 法轮功 六四 事件

0

Sorun $PATHortam değişkeninizle ilgili. Büyük olasılıkla berbat ettin. Buna benzer olmalıdır:

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

Bu Linux Mint iş parçacığına bakın: http://forums.linuxmint.com/viewtopic.php?f=18&t=119561 .

$PATHKabuğundaki şu komutla onarabilirsiniz :

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

Bu geçici! Sorun yeniden başlatma ile devam ederse, büyük olasılıkla $PATHaltındaki ortam kurulum dosyalarından birinde yer aldınız /etc.


0

"Komut bulunamadı" paketi linux yardımcı programıdır; yalnızca python oturumlarında değil, komut kabuğu istemindeki bilinmeyen komutlara yanıt verir. (Bu adın bir python paketi olduğunu da görüyorum.)

Bağımlılıkları arasında python vardır, yani tetiklendiğinde python kullanır; Kabuğun PATH'nizde bulamadığı bir komut yazdığınızda python'un neden çağrıldığını açıklar.

Linux'ta bulunmayan komutu yüklemek için bir 'apt' paketi olduğunu görüyorum; Debian linux için, bu katalog:

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


0

Sorumlu tüm satırları yorum command-not-foundiçinde /etc/bash.bashrcPython sürümleri geçerek oluşturulan sorunu çözüldü.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.