ナンセンスなコマンドを入力するたびに、この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
$

編集 -/ 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
@リッパー:興味深い。いくつかの迷いの観察。あなたの.bashrcにはpythonに接続されたものがありますか?他のユーザーアカウントでも同じ動作をしますか?なぜPython 2.7がローカルにインストールされているのですか?このインストールのデフォルトの公式pythonは何ですか。2.7ではない場合、インストールされていますか?これはどのubuntuバージョンですか?
ファヒムミタ

@Faheem-.bashrcに関連するPythonは何も表示されません。私は自分でPythonをローカルにインストールしました。マシンには他にも2つのpythonがインストールされています。Ubuntu 10.10がインストールされています。
ripper234

これは、Pythonのインストールが迷子になったような匂いがします。公式システムpythonsがインストールされているバージョンと、2.7をローカルにインストールした理由は何ですか?正式に入手可能なバージョンの1つではありませんか?
ファヒムミサ

@Faheem-あなたの質問がわかりません。「公式」とはどういう意味ですか?Python 2.7が必要だったので、インストールしました。私はこのボックスの管理者です。make / make installを実行してpythonをインストールしましたが、怪しいことは何もしませんでした(私は思います)。
ripper234

@ripper:意味、ubuntuはバイナリパッケージとして提供しました。pythonと入力すると、どのpythonが得られますか?
ファヒムミタ

回答:


12

わかりました、それは物事を少し明確にします。command-not-foundコマンドがシステム上で見つからない場合に実行されるpythonプログラムです。(その機能は、タイプミスなどの場合の代替案と修正を提案すること/usr/bin/command-not-foundです。)を参照してください。CommandNotFoundモジュールをインポートしようとしていますが、Pythonインストールの問題を明確に指摘できません。私はにそれほど馴染みがありませんがcommand-not-found、Pythonのインストールを修正すると問題は解決すると思います。

少し詳しく説明すると、command-not-foundモジュールがデフォルトのpythonが探していない場所にある可能性があります。基本的にパスの問題。

デバッグの提案:

1)最初に、からの出力は何ですか

$ which python

そして、そのファイルはどのパッケージ/インストールに属しますか?

2)以下のコードに対応するインストールの出力は何ですか?ここでのパスは、このpythonのインポートパスです。

$ 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はcommand-not-foundパッケージの一部であり、既にマシンにインストールされている必要があります。インストールされていない場合、このメッセージは表示されません。ただし、パッケージマネージャーに照会することで簡単に確認できます。dpkg -l command-not-found。あなたの問題は、デフォルトのPythonインストールでこのモジュールが見えないことです。上記のデバッグ手順をいくつか追加します。その他の修正や修正をお気軽にどうぞ。
ファヒームミタ

このフォローアップの質問を参照してください- unix.stackexchange.com/questions/9711/...
ripper234

リンクcommand-not-found(それは「コマンドではない-FOUND」を検索するときに「エラー」が期待される結果である場合には伝えるのは難しいですが...)壊れているようだ
Nikana Reklawyks

2

私は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


6
command_not_foundハンドラーを無効にする場合は、混乱しないでください/usr(後続のアップグレードが失敗したり、後続のアップグレードで元に戻されたりする可能性があります)。代わりに、変更し/etc/bash.bashrcます。または、を使用して自分~/.bashrcでこれを無効にしますunset -f command_not_found_handle
ジル 'SO-悪である停止

特に、/etc/bash.bashrcbashパッケージによって提供されるため、そのパッケージの更新を中断する可能性があります。
Ciro Santilli新疆改造中心法轮功六四事件

2

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

を開いた後/usr/lib/command-not-found、このエラーはシステムが新しくインストールされたpython3.5.0を使用してこのスクリプトを実行していることが原因であることがわかりましたpython3

このエラーは、最初の行を

#!/usr/bin/python3

#!/usr/bin/python3.4  

これが最良の答えです。私の場合、互換性が壊れてはならないと考えて、python3を新しいマイナーバージョンにシンボリックリンクするのは愚かな決断でした。しかし、ええ、学んだ教訓。
ガイブラシスリーウッド

0

問題は$PATH環境変数にあります。あなたはおそらくそれを台無しにしています。次のようになります。

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

:このLinuxのミントのスレッドを参照してください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


0

「command-not-found」パッケージはLinuxユーティリティです。Pythonセッション内だけでなく、コマンドシェルプロンプトで不明なコマンドに応答します。(この名前のpythonパッケージもあります。)

依存関係の中にpythonがあります。つまり、トリガーされるとpythonを使用します。シェルがPATHで見つけられないコマンドを入力するたびにpythonが呼び出される理由を説明します。

Linuxにはcommand-not-foundをインストールする「apt」パッケージがあります。Debian linuxの場合、これは次の場所にカタログされています。

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


0

Pythonバージョンを切り替えることで作成された問題command-not-found/etc/bash.bashrc解決するために責任を負うすべての行をコメントアウトしました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.