it-swarm.com.de

ImportError: Kein Modul mit dem Namen bz2 für Python 2.7.2

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?

35
ushadow

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:

Entfernen Sie den Symlink 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

Verschieben Sie /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

Entfernen Sie Ihre Python-Installation

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:

  • Entfernen Sie die Befehle python und python2.7 und pythonw und pythonw2.7 aus /usr/local/bin.
  • /usr/local/lib/python/2.7.2 entfernen

Dieser Teil ist nicht vollständig, weil ich vergessen habe, was sonst noch da ist.

25
wkl

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.

45
arbel

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/
23
CK.Nguyen

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
6
Oleg Neumyvakin

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.

4
yfliu

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/
3
田大龙

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 ...

2
phildobbin

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.

1
Mithril

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
1
Weiyu Cheng

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
0