Tại sao thông báo lỗi python này được tạo bất cứ khi nào tôi gõ một lệnh vô nghĩa?


16

Bất cứ khi nào tôi gõ bất kỳ lệnh "vô nghĩa" nào, thông báo lỗi python này sẽ được tạo. Các lệnh bình thường hoạt động tốt. Bất kỳ ý tưởng làm thế nào để gỡ lỗi này?

$ 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 - sau khi sửa lỗi / usr / bin / python của tôi, bây giờ tôi nhận được thông báo lỗi python khác nhau này:

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

Bằng cách nào đó, python đang được chạy bất cứ khi nào tôi gõ nhầm lệnh.


1
@ripper: Thú vị. Một vài quan sát đi lạc. .Bashrc của bạn có bất cứ điều gì được kết nối với python trong đó không? Bạn có nhận được hành vi tương tự với các tài khoản người dùng khác không? Tại sao bạn có cài đặt python 2.7 cục bộ? Con trăn chính thức mặc định trên bản cài đặt này là gì và nếu không phải là 2.7, bạn đã cài đặt nó chưa? Phiên bản ubfox này là gì?
Faheem Mitha

@Faheem - Tôi không thấy bất cứ điều gì liên quan đến trăn trong .bashrc. Tôi đã cài đặt python tại địa phương mình. Tôi biết máy cũng có hai con trăn khác được cài đặt. Tôi đã cài đặt Ubuntu 10.10.
ripper234

Điều này có mùi hơi giống như một cài đặt trăn đi lạc lối. Các phiên bản chính thức của hệ thống pythons được cài đặt là gì và tại sao bạn cài đặt 2.7 cục bộ? Nó không phải là một trong những phiên bản chính thức có sẵn?
Faheem Mitha

@Faheem - Tôi không hiểu câu hỏi của bạn. "Chính thức" nghĩa là gì? Tôi cần python 2.7, vì vậy tôi đã cài đặt nó. Tôi là quản trị viên của hộp này. Tôi đã cài đặt python bằng cách thực hiện make / make install, tôi không làm gì tanh cả (tôi nghĩ vậy).
ripper234

@ripper: Có nghĩa là, Ubuntu đã cung cấp nó dưới dạng gói nhị phân. Khi bạn gõ python, bạn nhận được con trăn nào?
Faheem Mitha

Câu trả lời:


12

Ok, điều đó làm cho mọi thứ rõ ràng hơn một chút. command-not-foundlà một chương trình python, chạy khi lệnh của bạn không được tìm thấy trên hệ thống. (Chức năng của nó là đề xuất các giải pháp thay thế và sửa chữa trong trường hợp nhập sai, v.v.) Xem /usr/bin/command-not-found. Nó đang cố gắng nhập CommandNotFoundmô-đun và không thể, rõ ràng chỉ vào một cài đặt python bị vặn. Tôi không quen thuộc lắm command-not-found, nhưng tôi nghĩ rằng việc sửa lỗi cài đặt Python của bạn sẽ khiến vấn đề biến mất.

Chỉ cần giải thích một chút, điều có thể xảy ra là command-not-foundmô-đun được đặt ở đâu đó nơi con trăn mặc định của bạn không tìm kiếm nó. Một vấn đề đường dẫn, về cơ bản.

Đề xuất gỡ lỗi:

1) Để bắt đầu, đầu ra từ đâu

$ which python

và tập tin / cài đặt đó thuộc về cái gì?

2) Đầu ra cho cài đặt của bạn tương ứng với mã dưới đây là gì? Đường dẫn ở đây là đường dẫn nhập của con trăn này.

$ 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
một giải pháp khả thi là # apt-get remove command-not-found...
simon

"Bắt vít cài đặt python" - bất kỳ ý tưởng nào chính xác là thiếu. CommandNotFound là mô-đun python lõi hay tôi có thể / nên cài đặt riêng nó không?
ripper234

@ripper: CommandNotFound là một phần của gói không tìm thấy lệnh , phải được cài đặt trên máy của bạn, nếu không bạn sẽ không thấy thông báo này. Tuy nhiên, bạn có thể dễ dàng xác minh điều đó bằng cách truy vấn trình quản lý gói. dpkg -l lệnh không tìm thấy. Vấn đề của bạn là cài đặt python mặc định của bạn không nhìn thấy mô-đun này. Tôi sẽ thêm một số bước để gỡ lỗi ở trên. Những người khác xin vui lòng sửa đổi và chính xác.
Faheem Mitha

Xem câu hỏi tiếp theo này - unix.stackexchange.com/questions/9711/ trên
ripper234

các liên kết command-not-founddường như bị hỏng (mặc dù thật khó để biết liệu "lỗi" có phải là kết quả mong đợi khi tìm kiếm "lệnh không tìm thấy" ...)
Nikana Reklawyks

2

Tôi gặp phải vấn đề này khi tôi nâng cấp từ stock 2.6 đi kèm với bản cài đặt ub Ubuntu của tôi lên python 3.2, với cài đặt thay thế mặc định là 3.2 thay vì 2.6.

Nếu bạn nhìn vào /etc/bash.bashrctập tin của mình, có một dòng cho biết nó chạy tập lệnh python này để tìm kiếm các lựa chọn thay thế trong repos. Có một gói cho nó, tuy nhiên bạn không thể gỡ bỏ gói sau khi đã nâng cấp. Tôi chỉ đơn giản là di chuyển /usr/share/command-not-found/usr/lib/command_not_found_handlervà khởi động lại hạn của tôi và nó hoạt động như tốt ol' bash: command not found.


6
Nếu bạn muốn vô hiệu hóa command_not_foundtrình xử lý, đừng lộn xộn /usr(điều đó có thể làm cho các lần nâng cấp tiếp theo thất bại hoặc bị hoàn tác bởi các lần nâng cấp tiếp theo). Thay vào đó, thay đổi /etc/bash.bashrc. Hoặc vô hiệu hóa điều này trong của riêng bạn ~/.bashrcvới unset -f command_not_found_handle.
Gilles 'SO- đừng trở nên xấu xa'

Đặc biệt, /etc/bash.bashrcđược cung cấp bởi bashgói, vì vậy bạn có thể phá vỡ các bản cập nhật cho gói đó.
Ciro Santilli 心 心 事件

2

Tôi đã gặp lỗi tương tự sau khi cài đặt Python 3.5.0 trên Ubuntu 14.04 LTS của tôi (có python hệ thống phiên bản 3.4.0).

Sau khi tôi mở /usr/lib/command-not-found, tôi nhận ra lỗi này là do hệ thống thực thi tập lệnh này bằng cách sử dụng python3.5.0 mới cài đặt, vì cài đặt Python3.5.0 tạo ra dẫn đến hệ thống sử dụng nó khi bạn nhập python3.

Lỗi này có thể dễ dàng sửa chữa bằng cách thay đổi dòng đầu tiên từ

#!/usr/bin/python3

đến

#!/usr/bin/python3.4  

Đây là câu trả lời tốt nhất imo. Trong trường hợp của tôi, đó là một quyết định ngu ngốc khi liên kết symthon python3 sang phiên bản nhỏ mới hơn, nghĩ rằng khả năng tương thích không nên phá vỡ. Nhưng vâng, bài học kinh nghiệm.
Guybrush Threepwood

0

Vấn đề là với $PATHbiến môi trường của bạn . Bạn rất có thể đã làm hỏng nó. Nó sẽ tương tự như thế này:

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

Xem chủ đề Linux Mint này: http://forums.linuxmint.com/viewtopic.php?f=18&t=119561 .

Bạn có thể sửa chữa $PATHtrong shell của mình bằng lệnh này:

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

Tạm thời thôi! Nếu sự cố vẫn còn khi khởi động lại thì rất có thể bạn đã xử lý $PATHmột trong các tệp thiết lập môi trường của mình /etc.


0

Gói "lệnh không tìm thấy" là một tiện ích linux; nó đáp ứng các lệnh không xác định tại dấu nhắc lệnh shell, không chỉ trong các phiên python. (Tôi thấy đó cũng là một gói python của tên này.)

Nó có python trong số các phụ thuộc của nó, tức là nó sử dụng python khi được kích hoạt; vì vậy, lý do tại sao python được gọi bất cứ khi nào bạn gõ một lệnh mà shell không thể tìm thấy trên PATH của bạn.

Tôi thấy có một gói 'apt' để cài đặt lệnh không tìm thấy trong Linux; đối với Debian linux, đây là danh mục tại:

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


0

Cho ý kiến ra tất cả các dòng chịu trách nhiệm command-not-foundtrong /etc/bash.bashrcgiải quyết vấn đề, được tạo ra bằng cách chuyển sang phiên bản Python.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.