Ich benutze Python 2.7.2 auf Ubuntu 11.10. Beim Importieren des bz2-Moduls ist diese Fehlermeldung aufgetreten:
ImportError: No module named bz2
Ich dachte, das bz2-Modul soll mit Python 2.7 kommen. Wie kann ich dieses Problem beheben?
BEARBEITEN: Ich glaube, ich habe Python 2.7.2 zuvor durch Kompilieren aus dem Quellcode installiert. Wahrscheinlich hatte ich an diesem Punkt kein libbz2-dev und daher ist das bz2-Modul nicht installiert. Jetzt hoffe ich, Python2.7 durch zu installieren
Sudo apt-get install python2.7
Aber es wird sagen, dass es bereits installiert ist. Gibt es eine Möglichkeit, die vorherige Python2.7-Installation zu deinstallieren und neu zu installieren?
Okay, das ist in Antwortform viel einfacher zu verstehen, also werde ich das, was ich in meinem Kommentar schreiben würde, zu dieser Antwort bewegen.
Zum Glück haben Sie die Systemversion von Python nicht überschrieben, da Ubuntu 11.10 mit vorinstalliertem 2.7.2 geliefert wird.
Ihre Python-Binaries (python
und python2.7
) befinden sich in /usr/local/bin
, einem Verzeichnis, in dem normalerweise benutzerspezifische Dateien installiert sind. Das ist in Ordnung, es bedeutet, dass Ihr System-Python noch vorhanden ist.
Versuchen Sie zunächst, den System-Python auszuführen. Geben Sie dies über die Befehlszeile ein:
/usr/bin/python -c "import bz2; print bz2.__doc__"
Das sollte so etwas ausdrucken:
λ > /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.
Wenn ja, dann geht es dir gut.
Sie müssen also lediglich Ihre PATH
korrigieren, die der Shell sagt, wo Befehle zu finden sind. Da /usr/local/bin
Vorrang vor /usr/local
hat, gibt es einige Möglichkeiten, dies in der Reihenfolge Schwierigkeit/Ärger/Änderung Ihres Systems zu beheben:
python
aus /usr/local/bin
Dies bewirkt, dass bei der Eingabe von python
wieder /usr/bin/python
ausgeführt wird. Dies ist ein Alias für den Python des Systems 2.7.2.
Sudo rm /usr/local/bin/python
/usr/bin
, um eine höhere Priorität in der PATH
zu erhalten.Vielleicht ist es nicht wünschenswert, wenn Sie bereits /usr/local/bin
-Elemente haben, die Vorrang vor /usr/bin
haben sollten. Ich füge dies jedoch der Vollständigkeit halber hinzu.
In Ihrem Shell-Profil (nicht sicher, was Ubuntus Standard ist, aber ich benutze ~/.bash_profile
, können Sie Folgendes tun:
export PATH=/usr/bin:$PATH
Dies ist extrem und die erste Option, die ich vorgestellt habe, sollte Ihre erste sein.
Benötigen Sie wirklich eine eigene Python-Version? Wenn Sie isolierte Python-Umgebungen wünschen, möchten Sie wahrscheinlich virtualenv
. Sie können Ihre wahrscheinlich entfernen, wenn es keinen Grund gibt, dies nicht zu tun.
Es wird zwar ein wenig nervig sein, aber im Grunde:
python
und python2.7
und pythonw
und pythonw2.7
aus /usr/local/bin
./usr/local/lib/python/2.7.2
entfernenDieser Teil ist nicht vollständig, weil ich vergessen habe, was sonst noch da ist.
Ich habe das gleiche Problem, hier ist meine Lösung.
Der Grund für den Importfehler ist, dass Sie beim Erstellen von Python die bz2-Header nicht finden konnten und das Erstellen des bz2-Moduls übersprungen wurde.
Installieren Sie sie unter Ubuntu/Debian:
Sudo apt-get install libbz2-dev
Fedora:
Sudo yum install bzip2-devel
und bauen Sie dann Python neu auf
kommt aus eine andere Antwort
Die Antwort von @ birryree hilft dabei, zum ursprünglichen Python des Systems zurückzukehren.
Falls Sie Python2.7 verwenden müssen, sollten Sie Folgendes ausführen: (Centos 6.4)
Sudo cp /usr/lib64/python2.6/lib-dynload/bz2.so /usr/local/lib/python2.7/
Vielleicht hilft es jemandem:
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
Für Ubuntu/Debian:
Sudo apt-get install libbz2-dev
Für Fedora:
Sudo yum install bzip2-devel
Und dann kompilieren Sie den Python erneut und installieren Sie ihn.
matocnhois Antwort funktioniert für mich in centOS
Sudo cp /usr/lib64/python2.6/lib-dynload/bz2.so /usr/local/lib/python2.7/
und ich habe virtualenv verwendet, so lautet der Befehl
Sudo cp /usr/lib64/python2.6/lib-dynload/bz2.so ../../../env/lib/python2.7/
Ich habe einen Symlink zwischen /usr/lib64/python2.6/lib-dynload/bz2.so /usr/local/lib/python2.7/lib-dynload/
verwendet
Funktionierte gut für mich ...
Stellen Sie sicher, dass Sie bz2 installiert haben, und führen Sie Sudo yum install bzip2-devel
aus.
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
ist normalerweise /usr/local/lib/python2.7/
. Sie müssen diese ersetzen, wenn Sie Python in einem anderen Pfad installieren.
Wenn Ihr bz2 in /usr/lib64/python2.7/lib-dynload/ den folgenden Namen hat: "bz2.x86_64-linux-gnu.so", denken Sie daran, ihn in bz2.so umzubenennen, wenn er in Ihren Pfad kopiert wird nicht korrekt beschafft werden:
cp /usr/lib64/python2.6/lib-dynload/bz2.x86_64-linux-gnu.so /python_install_path/lib/python2.7/bz2.so
Ich hatte das gleiche Problem mit Python 2.17.15 und Pyenv auf Ubuntu. System-Python aus/usr/bin/python hat gut funktioniert. In meinem Fall half es, libbz2-dev zu installieren und anschließend python 2.7.15 neu zu installieren:
Sudo apt-get install libbz2-dev
pyenv uninstall 2.7.15
pyenv install 2.7.15