Чому це повідомлення про помилку python генерується кожного разу, коли я набираю безглузду команду?


16

Щоразу, коли я набираю будь-яку команду "дурниця", генерується це повідомлення про помилку python. Звичайні команди працюють нормально. Будь-яка ідея, як налагодити це?

$ 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 - після виправлення мого / usr / bin / python я отримую таке інше повідомлення про помилку python:

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

Якось, python запускається щоразу, коли я неправильно ввожу команду.


1
@ripper: Цікаво. Кілька бродячих спостережень. Чи є у вашому .bashrc щось пов’язане з python у ньому? Чи ви маєте таку ж поведінку з іншими обліковими записами користувачів? Чому у вас встановлений python 2.7 локально? Що таке офіційний пітон за замовчуванням у цій установці, а якщо не 2,7, чи встановлений він? Яка версія ubuntu це?
Faheem Mitha

@Faheem - я не бачу нічого, що стосується python у .bashrc. Я локально встановив пітон. Я знаю, що в машині встановлено ще два пітона. У мене встановлено Ubuntu 10.10.
ripper234

Це трохи пахне налаштуванням пітона. Які версії офіційних системних пітонів встановлені, і чому ви встановили 2.7 локально? Хіба це не одна з офіційно доступних версій?
Faheem Mitha

@Faheem - я не розумію вашого запитання. Що ви маєте на увазі під "службовим" Мені знадобився python 2.7, тому я його встановив. Я адміністратор цього вікна. Я встановив python, роблячи make / make install, нічого рибного не робив (я думаю).
ripper234

@ripper: Значить, ubuntu надав його як двійковий пакет. Коли ви вводите python, який пітон ви отримуєте?
Faheem Mitha

Відповіді:


12

Гаразд, це робить речі яснішими. command-not-foundце програма python, яка запускається, коли ваша команда не щось знайдено в системі. (Його функція полягає в тому, щоб запропонувати альтернативи та виправлення в разі помилки тощо) Див /usr/bin/command-not-found. Він намагається імпортувати CommandNotFoundмодуль і не в змозі, чітко вказуючи на накручену установку пітона. Я не такий знайомий command-not-found, але я думаю, що виправлення вашої установки Python призведе до усунення проблеми.

Щоб трохи детальніше розібратися, можливо, що, мабуть, відбувається те, що command-not-foundмодуль знаходиться десь там, де ваш пітон за замовчуванням його не шукає. Проблема шляху, в основному.

Пропозиції щодо налагодження:

1) Для початку, з чого складається вихід

$ which python

і до чого пакет / установка належить цьому файлу?

2) Який вихід для вашої установки відповідає наведеному нижче коду? Шлях тут - шлях імпорту цього пітона.

$ 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
одне можливе рішення - # apt-get remove command-not-found...
симон

"Накручена установка python" - будь-яка ідея, чого саме немає. Чи CommandNotFound є основним модулем python, чи можу я / повинен встановити його окремо?
ripper234

@ripper: CommandNotFound є частиною пакету не знайдених команд , який повинен бути встановлений на вашій машині, інакше ви не побачили б це повідомлення. Однак ви можете легко перевірити це, запитуючи менеджера пакунків. команда dpkg -l не знайдена. Ваша проблема полягає в тому, що ваша типова установка python не бачить цього модуля. Я додаю кілька кроків для налагодження вище. Інші, будь ласка, можете змінювати та виправляти.
Faheem Mitha

Дивіться це подальше
ripper234

посилання command-not-foundздаються розірваними (хоча важко сказати, чи є "помилка" очікуваним результатом при пошуку "не знайдено команд" ...)
Nikana Reklawyks

2

Я зіткнувся з цим, коли оновив з запасу 2.6, який прийшов з моєю установкою ubuntu, до 3.2-пітон, встановивши альтернативу за замовчуванням на 3,2, а не на 2,6.

Якщо ви подивитесь на свій /etc/bash.bashrcфайл, є рядок, який говорить йому запустити цей скрипт python, щоб шукати альтернативи в репост. Є пакет для цього, проте ви не можете видалити пакунок після оновлення. Я просто перемістив /usr/share/command-not-foundі, /usr/lib/command_not_found_handlerі перезапустив свій термін, і він працює як хороший ol 'bash : command not found.


6
Якщо ви хочете відключити command_not_foundобробник, не возиться з цим /usr(це може призвести до зриву наступних оновлень або скасування їх наступним оновленням). Натомість зміни /etc/bash.bashrc. Або відключити це самостійно за ~/.bashrcдопомогою unset -f command_not_found_handle.
Жил "ТАК - перестань бути злим"

Зокрема, /etc/bash.bashrcнадається bashпакетом, щоб ви могли зламати оновлення цього пакету.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

2

У мене була така ж помилка після встановлення Python 3.5.0 на моєму Ubuntu 14.04 LTS (який має системний пітон версії 3.4.0).

Після того, як я відкрив /usr/lib/command-not-found, я зрозумів, що ця помилка пов’язана з виконанням цього сценарію системою за допомогою нещодавно встановленого python3.5.0, оскільки встановлення Python3.5.0 створює приводить систему до використання її під час введення python3.

Цю помилку можна легко виправити, змінивши перший рядок з

#!/usr/bin/python3

до

#!/usr/bin/python3.4  

Це найкраща відповідь imo. У моєму випадку це було дурним рішенням привчати python3 до нової другорядної версії, сумісність мислення не повинна порушуватися. Але так, урок засвоєний.
Гайбруш Тріпвуд

0

Проблема полягає у $PATHзмінній вашого середовища. Ви, швидше за все, це зіпсували. Це має бути подібним до цього:

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

Дивіться цю нитку Linux Mint: http://forums.linuxmint.com/viewtopic.php?f=18&t=119561 .

Ви можете відремонтувати свою $PATHоболонку за допомогою цієї команди:

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

Це тимчасово! Якщо проблема не зникає з перезавантаженням, ви, швидше за все, перенесли $PATHв один із файлів налаштування середовища в /etc.


0

Пакет "команда не знайдено" - це утиліта Linux; він відповідає на невідомі команди в командному рядку командної оболонки, а не лише в сеансах python. (Я бачу, що також є пакет python з цією назвою.)

Серед її залежностей є пітон, тобто він використовує пітон при його спрацюванні; так що пояснюється, чому python викликається кожного разу, коли ви вводите команду, яку оболонка не може знайти у вашому PATH.

Я бачу, є пакет "apt" для встановлення не знайдених команд в Linux; для Debian linux це каталогізовано за адресою:

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


0

Коментуючи все рядки відповідальності за command-not-foundв /etc/bash.bashrcвирішити проблему, яка була створена шляхом перемикання версій Python.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.