为什么每当我输入无意义的命令时都会生成此 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-found,但我认为修复你的 Python 安装将使问题消失。

详细说明一下,可能发生的情况是该command-not-found模块位于默认 python 不寻找它的地方。基本上是路径问题。

调试建议:

  1. 首先,输出是什么

    $ 类型 python

该文件属于什么包/安装?

  1. 您的安装对应于以下代码的输出是什么?这里的路径是这个python的导入路径。

    $ python Python 2.6.6 (r266:84292, Dec 27 2010, 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 时,我遇到了这个问题,并将默认替代设置为 3.2 而不是 2.6。

如果您查看/etc/bash.bashrc文件,其中有一行告诉它运行此 python 脚本以在存储库中查找替代方案。有一个适用于它的软件包,但是升级后您将无法删除该软件包。我只是简单地移动了/usr/share/command-not-foundand/usr/lib/command_not_found_handler并重新启动了我的术语,它就像很好的 ol' 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您可以使用以下命令在 shell 中修复:

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

这是暂时的!如果重新启动后问题仍然存在,那么您很可能已将其放入$PATH您的环境设置文件之一的/etc.

相关内容