web-dev-qa-db-fra.com

ImportError: Aucun module nommé bz2 pour Python 2.7.2

J'utilise Python 2.7.2 sur Ubuntu 11.10. J'ai eu cette erreur lors de l'importation du module bz2:

ImportError: No module named bz2

Je pensais que le module bz2 est supposé venir avec Python 2.7. Comment puis-je résoudre ce problème?

EDIT: Je pense avoir déjà installé Python 2.7.2 en compilant à partir des sources. Probablement à ce stade je n'avais pas libbz2-dev et le module bz2 n'est donc pas installé. Maintenant, j'espère installer Python2.7 via

Sudo apt-get install python2.7

Mais il dira que c'est déjà installé. Existe-t-il un moyen de désinstaller l’installation précédente de Python2.7 et de le réinstaller?

35
ushadow

D'accord, c'est beaucoup plus facile à comprendre dans le formulaire de réponse, alors je vais déplacer ce que j'écrirais dans mon commentaire à cette réponse.

Heureusement pour vous, vous n'avez pas écrasé la version système de python, car Ubuntu 11.10 est livré avec la version 2.7.2 préinstallée.

Vos fichiers binaires python (python et python2.7) se trouvent dans /usr/local/bin, qui est un répertoire dans lequel les éléments spécifiques à l'utilisateur sont généralement installés. C'est bon, cela signifie que votre système python est toujours là.

Commencez par essayer d’exécuter le système python. Tapez ceci à partir de la ligne de commande:

/usr/bin/python -c "import bz2; print bz2.__doc__"

Cela devrait imprimer quelque chose comme ceci:

λ > /usr/bin/python -c "import bz2; print bz2.__doc__"

The python bz2 module provides a comprehensive interface for
the bz2 compression library. It implements a complete file
interface, one shot (de)compression functions, and types for
sequential (de)compression.

Si c'est le cas, cela signifie que vous allez bien.

Il vous suffit donc de réparer votre PATH, qui indique au shell où trouver les commandes. /usr/local/bin sera prioritaire sur /usr/local, il existe donc plusieurs façons de résoudre ce problème, par ordre de difficulté/gêne/modification du système:

Supprimer le lien symbolique python de /usr/local/bin

Cela fera en sorte que lorsque vous tapez python, il devrait revenir à l'exécution de /usr/bin/python, qui est un alias pour le système python 2.7.2.

Sudo rm /usr/local/bin/python

Déplacez /usr/bin pour avoir une priorité plus élevée dans la PATH

Cela pourrait ne pas être souhaitable si vous avez déjà des éléments dans /usr/local/bin qui devraient avoir priorité sur /usr/bin, mais j'ajoute ceci pour des raisons de complétude.

Dans votre profil Shell (vous ne savez pas quelle est la valeur par défaut d'Ubuntu, mais j'utilise ~/.bash_profile, vous pouvez le faire:

export PATH=/usr/bin:$PATH

Supprimez votre installation python

C'est extrême et la première option que j'ai présentée devrait être votre première option.

Avez-vous vraiment besoin de votre propre version de Python? Si vous voulez des environnements python isolés, vous voulez probablement vraiment virtualenv. Vous pouvez probablement retirer le vôtre sauf s'il y a une raison pour ne pas le faire.

Cela va être un peu agaçant cependant, mais en gros:

  • Supprimez les commandes python et python2.7 et pythonw et pythonw2.7 de /usr/local/bin.
  • Supprimer /usr/local/lib/python/2.7.2

Cette partie n'est pas complète car j'oublie ce qu'il y a d'autre.

25
wkl

Je rencontre le même problème, voici ma solution.

La raison de l'erreur d'importation est que vous construisez python, le système n'a pas pu trouver les en-têtes bz2 et a ignoré la construction du module bz2.

Installez-les sur Ubuntu/Debian:

Sudo apt-get install libbz2-dev

Feutre:

Sudo yum install bzip2-devel

puis reconstruire python

vient de une autre réponse

La réponse de @ birryree aide à revenir au python d'origine du système.

45
arbel

Si vous devez utiliser python2.7, vous devez exécuter: (Centos 6.4)

Sudo cp /usr/lib64/python2.6/lib-dynload/bz2.so /usr/local/lib/python2.7/
23
CK.Nguyen

Peut-être que cela aidera quelqu'un:

apt-get install libbz2-dev # for bz2
apt-get install libssl-dev # for _ssl
apt-get install libsqlite3-dev # for sqlite
apt-get install libreadline6-dev # for readline,  _curses,  _curses_panel
6
Oleg Neumyvakin

Pour Ubuntu/Debian:

Sudo apt-get install libbz2-dev

Pour Fedora:

Sudo yum install bzip2-devel

Et puis recompilez le python et installez-le.

4
yfliu

la réponse de matocnhoi fonctionne pour moi en centOS

Sudo cp /usr/lib64/python2.6/lib-dynload/bz2.so /usr/local/lib/python2.7/

et j'ai utilisé virtualenv, donc la commande est

Sudo cp /usr/lib64/python2.6/lib-dynload/bz2.so ../../../env/lib/python2.7/
3
田大龙

J'ai utilisé un lien symbolique entre /usr/lib64/python2.6/lib-dynload/bz2.so /usr/local/lib/python2.7/lib-dynload/

A bien fonctionné pour moi ...

2
phildobbin

Assurez-vous que bz2 est installé, exécutez Sudo yum install bzip2-devel.

  • Centos 6

    Sudo cp /usr/lib64/python2.6/lib-dynload/bz2.so /python_install_path/lib/python2.7
    
  • Centos 7

    Sudo cp /usr/lib64/python2.7/lib-dynload/bz2.so /python_install_path/lib/python2.7
    

python_install_path est généralement /usr/local/lib/python2.7/, vous devez le remplacer si vous installez python dans un autre chemin.

1
Mithril

Si votre bz2 dans /usr/lib64/python2.7/lib-dynload/ est nommé comme: "bz2.x86_64-linux-gnu.so", n'oubliez pas de le renommer en bz2.so lorsque vous le copiez sur votre chemin ne pas être correctement identifié:

cp /usr/lib64/python2.6/lib-dynload/bz2.x86_64-linux-gnu.so /python_install_path/lib/python2.7/bz2.so
1
Weiyu Cheng

J'ai eu le même problème avec Python 2.17.15 et pyenv sur Ubuntu. Le python système de/usr/bin/python a bien fonctionné. Dans mon cas, cela a aidé à installer libbz2-dev puis à réinstaller python 2.7.15:

Sudo apt-get install libbz2-dev
pyenv uninstall 2.7.15
pyenv install 2.7.15
0
Vladimir Gorovoy