python2.7 cassé par une erreur d'importation de faiblesse, veuillez aider!

27

Je viens de mettre à jour du 16.04 au 17.10, et chaque fois que j'essaie d'exécuter une commande python2.7, j'obtiens cette erreur:

pip install --upgrade pip
Traceback (most recent call last):
File "/home/XXXX/bin/pip", line 7, in <module>
    from pip import main
  File "/home/XXXX/local/lib/python2.7/site-packages/pip/__init__.py", 
line 5, in <module>
    import logging
  File "/usr/lib/python2.7/logging/__init__.py", line 26, in <module>
    import sys, os, time, cStringIO, traceback, warnings, weakref, 
collections
  File "/home/XXXX/lib/python2.7/weakref.py", line 14, in <module>
    from _weakref import (
ImportError: cannot import name _remove_dead_weakref

Un autre utilisateur a eu un problème similaire, mais cela affecte tout programme python que j'essaie d'exécuter. Je ne peux rien installer via pip, ni utiliser de scripts python. Je ne sais vraiment pas quoi faire, une aide serait grandement appréciée.

La sortie de "python --version" est

Python 2.7.12

cependant, "update python" produit:

python is already the newest version (2.7.14-2ubuntu1).
Alaisdar Alves
la source
J'ai mis à jour du 17.04 au 17.10 et fait face à la même chose ImportError: cannot import name _remove_dead_weakref. Mon Python est 2.7.14
Csaba Toth
Dans mon cas, j'utilise des environnements virtuels et je soupçonne que le python à l'intérieur de ces environnements virtuels est maintenant désynchronisé avec la version du système à tel point que cette erreur se produit. Je soupçonne que la reconstruction de l'environnement virtuel à partir de zéro peut résoudre mon problème, bien qu'il ait été difficile d'installer tous les packages :(
Csaba Toth

Réponses:

26

Ce n'est pas une solution Ubuntu, mais parce que cette question apparaît en haut dans les résultats de recherche de l'erreur, je voulais dire que j'avais cette erreur sur OSX car mon système par défaut Python était de 2,7, et j'ai préparé "python @ 2" pendant que l'installation d'un autre package.

Si vous êtes sous OSX et que vous utilisez homebrew, vérifiez vos packages installés avec brew en exécutant brew list, et si "python @ 2" apparaît dans cette liste, et Python 2.7 est votre système Python, vous pouvez supprimer le package installé brew avecbrew remove python@2 --ignore-dependencies

duhaime
la source
2
Cela s'est produit après une mise à niveau de brew remplaçant de nombreux packages par leur package @ version nouveaux ... Merci!
Hugo H
2
Cela m'a aidé. Lors de l'exécution swiftsur Mac, j'ai eu les erreurs mentionnées ci-dessus. Il s'est avéré que c'était parce qu'il utilisait python2 de brew. Le supprimer a résolu mon problème.
jmurphyau
2
Merci pour cela. Cela a aidé à résoudre mon lldbavertissement.
Steven Hepting du
Merci pour l'information. Je viens de mettre à jour mes liens symboliques dans / usr / local / bin / python pour pointer vers le dernier python Homebrew, plutôt que le système python
matt
9

Dans le cas où vous utilisiez un environnement virtuel, vous devrez le recréer. L'autre possibilité est que vous utilisiez une version de python basée sur la source ou installée latéralement qui se heurte à celle du système. Dans ce cas, vous devez déterminer que les bons dossiers et chemins d'accès sont configurés à partir des différents environnements.

Csaba Toth
la source
3

Dans mon cas, c'était une erreur liée à l'environnement virtuel. La création d'un nouvel environnement virtuel a donc fonctionné pour moi. Voici la liste des commandes qui peuvent vous y aider.

Installation de l'environnement virtuel:

pip install virtualenv

Création d'un nouvel environnement virtuel:

virtualenv -p {env_name}

Activation de l'environnement virtuel:

source env_name/bin/activate

Désactiver votre environnement virtuel:

deactivate
Abhinav1602
la source
L'OP ne fait aucune mention d'un env virtuel donc votre réponse ne résout pas le problème quand un env virtuel n'est pas utilisé.
MikeM