Pourquoi ce message d'erreur python est-il généré chaque fois que je tape une commande non-sens?


16

Chaque fois que je tape une commande "non-sens", ce message d'erreur python est généré. Les commandes normales fonctionnent bien. Une idée de comment déboguer cela?

$ 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 - après avoir corrigé mon / usr / bin / python, je reçois maintenant ce message d'erreur différent de python:

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

D'une manière ou d'une autre, python est exécuté chaque fois que je tape une commande.


1
@ripper: Intéressant. Quelques observations errantes. Votre .bashrc contient-il quelque chose en rapport avec python? Obtenez-vous ce même comportement avec d'autres comptes d'utilisateurs? Pourquoi avez-vous python 2.7 installé localement? Quel est le python officiel par défaut sur cette installation, et sinon 2.7, l'avez-vous installé? De quelle version d'Ubuntu s'agit-il?
Faheem Mitha

@Faheem - Je ne vois rien de python lié dans .bashrc. J'ai installé python localement moi-même. Je sais que la machine a également installé deux autres pythons. J'ai Ubuntu 10.10 installé.
ripper234

Cela sent un peu comme une installation python égarée. Quelles sont les versions officielles des systèmes pythons installés, et pourquoi avez-vous installé 2.7 localement? N'est-ce pas l'une des versions officiellement disponibles?
Faheem Mitha

@Faheem - Je ne comprends pas votre question. Qu'entendez-vous par «officiel»? J'avais besoin de python 2.7, donc je l'ai installé. Je suis l'administrateur de cette box. J'ai installé python en faisant make / make install, je n'ai rien fait de louche (je pense).
ripper234

@ripper: Cela signifie qu'ubuntu l'a fourni sous forme de package binaire. Lorsque vous tapez python, quel python obtenez-vous?
Faheem Mitha

Réponses:


12

Ok, ça rend les choses un peu plus claires. command-not-foundest un programme python, qui s'exécute lorsque votre commande ne se trouve pas sur le système. (Sa fonction est de suggérer des alternatives et des corrections en cas de faute de frappe, etc.) Voir /usr/bin/command-not-found. Il essaie d'importer le CommandNotFoundmodule et n'y parvient pas, pointant clairement vers une installation de python foirée. Je ne suis pas familier avec command-not-found, mais je pense que la correction de votre installation Python fera disparaître le problème.

Juste pour développer un peu, ce qui se passe probablement, c'est que le command-not-foundmodule est situé quelque part où votre python par défaut ne le recherche pas. Un problème de chemin, fondamentalement.

Suggestions de débogage:

1) Pour commencer, quelle est la sortie de

$ which python

et à quel package / installation ce fichier appartient-il?

2) Quelle est la sortie de votre installation correspondant au code ci-dessous? Le chemin ici est le chemin d'importation de ce 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
une solution possible est # apt-get remove command-not-found...
simon

"Installation de python foutu" - toute idée de ce qui manque exactement. CommandNotFound est-il un module python de base, ou puis-je / dois-je l'installer séparément?
ripper234

@ripper: CommandNotFound fait partie du package command-not-found , qui doit déjà être installé sur votre machine, sinon vous ne verriez pas ce message. Cependant, vous pouvez facilement vérifier cela en interrogeant le gestionnaire de packages. dpkg -l commande introuvable. Votre problème est que votre installation par défaut de python ne voit pas ce module. J'ajouterai quelques étapes pour déboguer ci-dessus. D'autres, n'hésitez pas à modifier et corriger.
Faheem Mitha

Voir cette question de suivi - unix.stackexchange.com/questions/9711/…
ripper234

les liens command-not-foundsemblent rompus (bien qu'il soit difficile de dire si "erreur" est le résultat attendu lors de la recherche de "commande introuvable" ...)
Nikana Reklawyks

2

Je suis tombé sur cela lorsque j'ai mis à niveau le stock 2.6 fourni avec mon installation ubuntu vers le python 3.2, en définissant l'alternative par défaut à 3.2 plutôt qu'à 2.6.

Si vous regardez votre /etc/bash.bashrcfichier, une ligne lui indique d'exécuter ce script python pour rechercher des alternatives dans le référentiel. Il existe un package pour cela, mais vous ne pouvez pas supprimer le package une fois que vous avez mis à niveau. Je viens tout simplement déplacé le /usr/share/command-not-foundet /usr/lib/command_not_found_handleret remis en marche mon mandat et il fonctionne comme le bon vieux bash: command not found.


6
Si vous souhaitez désactiver le command_not_foundgestionnaire, ne plaisante pas /usr(cela peut faire échouer les mises à niveau suivantes ou être annulées par les mises à niveau suivantes). Au lieu de cela, changez /etc/bash.bashrc. Ou désactivez-le vous-même ~/.bashrcavec unset -f command_not_found_handle.
Gilles 'SO- arrête d'être méchant'

En particulier, /etc/bash.bashrcest fourni par le bashpackage, vous pouvez donc interrompre les mises à jour de ce package.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

2

J'ai eu cette même erreur après avoir installé Python 3.5.0 sur mon Ubuntu 14.04 LTS (qui a un système python de la version 3.4.0).

Après avoir ouvert le /usr/lib/command-not-found, j'ai réalisé que cette erreur était due au fait que le système exécutait ce script en utilisant le python3.5.0 nouvellement installé, car l'installation de Python3.5.0 crée conduit le système à l'utiliser lorsque vous tapez python3.

Cette erreur peut être facilement corrigée en changeant la première ligne de

#!/usr/bin/python3

à

#!/usr/bin/python3.4  

C'est la meilleure réponse imo. Dans mon cas, c'était une décision stupide de lier symétriquement python3 à une version mineure plus récente, pensant que la compatibilité ne devrait pas casser. Mais oui, la leçon apprise.
Guybrush Threepwood

0

Le problème vient de votre $PATHvariable d'environnement. Vous avez probablement tout gâché. Cela devrait être similaire à ceci:

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

Voir ce fil Linux Mint: http://forums.linuxmint.com/viewtopic.php?f=18&t=119561 .

Vous pouvez réparer votre $PATHdans le shell avec cette commande:

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

C'est temporaire! Si le problème persiste avec un redémarrage, vous avez probablement arrosé le $PATHdans l'un de vos fichiers de configuration d'environnement sous /etc.


0

Le package "command-not-found" est un utilitaire Linux; il répond aux commandes inconnues à l'invite du shell de commande, pas seulement dans les sessions python. (Je vois qu'il y a aussi un paquet python de ce nom.)

Il a python parmi ses dépendances, c'est-à-dire qu'il utilise python lorsqu'il est déclenché; ce qui explique pourquoi python est invoqué chaque fois que vous tapez une commande que le shell ne trouve pas sur votre PATH.

Je vois qu'il y a un paquet «apt» pour installer une commande introuvable sous Linux; pour Debian linux, ceci est catalogué à:

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


0

Commentant toutes les lignes responsables de command-not-founddans /etc/bash.bashrcrésolu le problème, qui a été créé en changeant les versions Python.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.