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?
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:
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
/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
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:
python
et python2.7
et pythonw
et pythonw2.7
de /usr/local/bin
./usr/local/lib/python/2.7.2
Cette partie n'est pas complète car j'oublie ce qu'il y a d'autre.
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.
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/
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
Pour Ubuntu/Debian:
Sudo apt-get install libbz2-dev
Pour Fedora:
Sudo yum install bzip2-devel
Et puis recompilez le python et installez-le.
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/
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 ...
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.
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
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