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インストールをアンインストールして再インストールする方法はありますか?
さて、回答フォームでこれを理解する方がはるかに簡単なので、コメントに書いたものをこの回答に移動します。
幸いなことに、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環境はおそらくvirtualenv
が本当に必要です。理由がない限り、おそらく削除できます。
しかし、少し面倒になりますが、基本的には:
python2.7
からpython
およびpythonw2.7
およびpythonw
および/usr/local/bin
コマンドを削除します。/usr/local/lib/python/2.7.2
を削除この部分は完全ではありません。他に何があるかを忘れてしまうからです。
私も同じ問題に直面しています。これが私の解決策です。
インポートエラーの理由は、Pythonのビルド中に、システムがbz2ヘッダーを見つけられず、bz2モジュールのビルドをスキップしたためです。
Ubuntu/Debianにインストールします:
Sudo apt-get install libbz2-dev
Fedora:
Sudo yum install bzip2-devel
そして、Pythonを再構築します
@birryreeの答えは、システムの元のpythonに戻るのに役立ちます。
場合は、python2.7を使用する必要があります、実行する必要があります:(Centos 6.4)
Sudo cp /usr/lib64/python2.6/lib-dynload/bz2.so /usr/local/lib/python2.7/
たぶんそれは誰かを助けるでしょう:
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
Ubuntu/Debianの場合:
Sudo apt-get install libbz2-dev
Fedoraの場合:
Sudo yum install bzip2-devel
そして、pythonを再コンパイルしてインストールします。
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/
/usr/lib64/python2.6/lib-dynload/bz2.so /usr/local/lib/python2.7/lib-dynload/
間のシンボリックリンクを使用しました
私のためにうまく働いた...
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)をインストールする場合は、それを置き換える必要があります。
/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
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