web-dev-qa-db-ja.com

ImportError:Python 2.7.2のbz2という名前のモジュールはありません

Ubuntu 11.10。でPython 2.7.2を使用しています。bz2モジュールをインポートするとこのエラーが発生しました。

ImportError: No module named bz2

Bz2モジュールにはPython 2.7が付属しています。この問題を修正するにはどうすればよいですか?

編集:以前にソースからコンパイルしてPython 2.7.2をインストールしたと思います。おそらくその時点ではlibbz2-devがなかったため、bz2モジュールはインストールされていません。今、私はm Python2.7をインストールしたい

Sudo apt-get install python2.7

ただし、既にインストールされていると表示されます。以前のPython2.7インストールをアンインストールして再インストールする方法はありますか?

36
ushadow

さて、回答フォームでこれを理解する方がはるかに簡単なので、コメントに書いたものをこの回答に移動します。

幸いなことに、Ubuntu 11.10には2.7.2がプリインストールされているため、システムバージョンのpythonは上書きしませんでした。

pythonバイナリ(pythonおよびpython2.7)は/usr/local/binにあります。これはユーザー固有のものが通常インストールされるディレクトリです。これはそれはあなたのシステムpythonがまだ存在していることを意味します。

まず、システムpythonを実行してみてください。コマンドラインからこれを入力してください:

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

これにより、次のように出力されます。

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

もしそうなら、あなたは元気です。

そのため、コマンドを見つける場所をシェルに伝えるPATHを修正する必要があります。 /usr/local/bin/usr/localよりも優先されるため、システムを難易度/迷惑度/変更の順に修正する方法がいくつかあります。

/usr/local/binからシンボリックリンクpythonを削除します

これにより、pythonと入力したときに、システムのpython 2.7.2。のエイリアスである/usr/bin/pythonの実行に戻る必要があります。

Sudo rm /usr/local/bin/python

/usr/binを移動して、PATHの優先順位を高くします

既に/usr/local/bin/usr/binよりも優先すべきものがある場合は望ましくないかもしれませんが、完全を期すためにこれを追加しています。

シェルプロファイルで(Ubuntuのデフォルトが不明ですが、~/.bash_profileを使用しています。これを行うことができます。

export PATH=/usr/bin:$PATH

pythonインストールを削除

これは極端であり、最初に提示したオプションは最初のオプションです。

独自のバージョンのPythonが本当に必要ですか?隔離したい場合python環境はおそらくvirtualenvが本当に必要です。理由がない限り、おそらく削除できます。

しかし、少し面倒になりますが、基本的には:

  • python2.7からpythonおよびpythonw2.7およびpythonwおよび/usr/local/binコマンドを削除します。
  • /usr/local/lib/python/2.7.2を削除

この部分は完全ではありません。他に何があるかを忘れてしまうからです。

25
wkl

私も同じ問題に直面しています。これが私の解決策です。

インポートエラーの理由は、Pythonのビルド中に、システムがbz2ヘッダーを見つけられず、bz2モジュールのビルドをスキップしたためです。

Ubuntu/Debianにインストールします:

Sudo apt-get install libbz2-dev

Fedora:

Sudo yum install bzip2-devel

そして、Pythonを再構築します

別の回答

@birryreeの答えは、システムの元のpythonに戻るのに役立ちます。

46
arbel

場合は、python2.7を使用する必要があります、実行する必要があります:(Centos 6.4)

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

たぶんそれは誰かを助けるでしょう:

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

Ubuntu/Debianの場合:

Sudo apt-get install libbz2-dev

Fedoraの場合:

Sudo yum install bzip2-devel

そして、pythonを再コンパイルしてインストールします。

4
yfliu

matocnhoiの答えはcentOSで私のために働く

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

そして、私はvirtualenvを使用したので、コマンドは

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

/usr/lib64/python2.6/lib-dynload/bz2.so /usr/local/lib/python2.7/lib-dynload/間のシンボリックリンクを使用しました

私のためにうまく働いた...

2
phildobbin

Bz2がインストールされていることを確認し、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は通常/usr/local/lib/python2.7/です。別のパスにpython)をインストールする場合は、それを置き換える必要があります。

1
Mithril

/usr/lib64/python2.7/lib-dynload/内のbz2の名前が「bz2.x86_64-linux-gnu.so」の場合、パスにコピーするときにbz2.soに名前を変更するか、正しく調達されていない:

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

Python 2.17.15とUbuntuのpyenvで同じ問題が発生しました。システムpython from/usr/bin/pythonは正常に動作しました。 libbz2-devをインストールしてから再インストールするpython 2.7.15:

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