每当我输入废话命令时,为什么会生成此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
@ripper:有趣。一些流浪的观察。您的.bashrc中是否有与python相关的内容?您在其他用户帐户中也会得到同样的行为吗?为什么要在本地安装python 2.7?此安装上默认的默认官方python是什么,如果不是2.7,是否已安装?这是什么版本的ubuntu?
Faheem Mitha

@Faheem-我没有在.bashrc中看到任何与python相关的东西。我自己在本地安装了python。我知道这台机器还安装了另外两个python。我已经安装了Ubuntu 10.10。
ripper234 2011年

这闻起来有点像python安装误入歧途。官方系统python安装的版本是什么,为什么在本地安装2.7?它不是正式可用的版本之一吗?
Faheem Mitha

@Faheem-我不明白你的问题。您所说的“官方”是什么意思?我需要python 2.7,所以我安装了它。我是这个盒子的管理员。我通过make / make install安装了python,没有做任何可疑的事情(我认为)。
ripper234 2011年

@ripper:意思是,ubuntu将其作为二进制软件包提供。当您键入python时,您会得到哪个python?
Faheem Mitha

Answers:


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...
simon

“加快python安装”-任何想法到底缺少了什么。CommandNotFound是Python的核心模块,还是可以/应该单独安装?
ripper234 2011年

@ripper:CommandNotFound是command-not-found软件包的一部分,该软件包必须已经安装在您的计算机上,否则您将不会看到此消息。但是,您可以通过查询包管理器来轻松地验证这一点。dpkg -l命令未找到。您的问题是您的默认python安装没有看到此模块。我将在上面添加一些步骤进行调试。其他人请随时进行修改和更正。
Faheem Mitha


链接command-not-found似乎断开了(尽管在搜索“命令未找到”时很难说出“错误”是否是预期的结果...)
Nikana Reklawyks

2

当我从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


6
如果要禁用该command_not_found处理程序,请不要打扰/usr(这会使后续升级失败或被后续升级撤消)。相反,请更改/etc/bash.bashrc。或者在你自己禁用此~/.bashrcunset -f command_not_found_handle
吉尔(Gilles)“所以,别再邪恶了”,

特别/etc/bash.bashrc是由bash包提供,因此您可以中断对该包的更新。
Ciro Santilli新疆改造中心法轮功六四事件

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  

这是imo的最佳答案。在我看来,将python3符号链接到较新的次要版本是一个愚蠢的决定,认为兼容性不应该被破坏。但是,是,经验教训。
Guybrush Threepwood

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

“ command-not-found”软件包是一个linux实用程序;它会在命令外壳提示符下响应未知命令,而不仅仅是在python会话中。(我也看到了这个名字的python包。)

它的依赖项中有python,即在触发时使用python。因此,这说明了为什么您键入在Shell上找不到的命令时都会调用python的原因。

我看到有一个“ apt”软件包可以在Linux中安装Command-not-found。对于Debian linux,此目录位于:

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


0

注释掉所有负责command-not-foundin 的行以/etc/bash.bashrc解决此问题,该问题是通过切换Python版本创建的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.