無意味なコマンドを入力するたびにこのPythonエラーメッセージが生成されるのはなぜですか?

無意味なコマンドを入力するたびにこのPythonエラーメッセージが生成されるのはなぜですか?

「不明な」コマンドを入力するたびに、この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
$

編集する- /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

まあ、それは状況がより明確になります。command-not-foundシステムでコマンドが見つからないときに実行されるPythonプログラム。 (この機能は、印刷上のエラーなどがある場合は、代替と修正を提案することです。)を参照してください/usr/bin/command-not-found。モジュールをインポートしようCommandNotFoundとしましたが、できません。これは明らかにPythonのインストールが失敗したことを示しています。私はそれについてあまり慣れていませんが、command-not-foundPythonのインストールを修復すると問題がなくなると思います。

command-not-foundもう少し詳しく説明すると、モジュールはデフォルトのPythonが見つからない場所にある可能性があります。デフォルトではパスの問題です。

デバッグ提案:

  1. まず、出力は何ですか?

    $型Python

このファイルはどのパッケージ/インストールの一部ですか?

  1. インストール結果は次のコードに対応していますか?ここのパスはこのPythonのインポートパスです。

    $ python Python 2.6.6 (r266:84292, 2010年12月27日, 00:02:40) [GCC 4.4.5] on linux2 詳細については、「help」、「copyright」、「credits」、または「license」 「と入力してください。

    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' ]

答え2

Ubuntu 14.04 LTS(システムPythonバージョンは3.4.0)にPython 3.5.0をインストールした後も同じエラーが発生しました。

それを開いた後/usr/lib/command-not-found、私は新しくインストールされたpython3.5.0を使用してこのスクリプトを実行するシステムが原因でこのエラーが発生したことに気づきました。なぜなら、Python3.5.0をインストールすると、システムが入力時にそれを使用するからですpython3

このエラーは、最初の行を変更することで簡単に修正できます。

#!/usr/bin/python3

到着

#!/usr/bin/python3.4  

答え3

Ubuntuのインストールに付属のデフォルトの2.6から3.2 Pythonにアップグレードし、デフォルトのオーバーライドを2.6の代わりに3.2に設定したときにこの問題が発生しました。

ファイルを見ると、/etc/bash.bashrcこのPythonスクリプトを実行してリポジトリで代替を見つけるように指示する行があります。これにはパッケージがありますが、アップグレード後は削除できません。私は単に用語を移動し/usr/share/command-not-found/usr/lib/command_not_found_handler再起動し、それは良いbashのように動作しましたcommand not found

答え4

問題は$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設定ファイルの1つに問題を入れた可能性があります/etc

関連情報