5

python 2.4 が自動的にインストールされる redhat 5.8 を使用していますが、python 2.6 以降を必要とする python パッケージを使用しています。SO、システムバージョンを踏まないように、2.4と一緒にpython 2.7をインストールしました。

現在、pip を使用してパッケージをインストールしようとしていますが、次のエラーが発生します。

CompressionError: bz2 module is not available

ただし、これを行うとサーバーバージョンが与えることが証明されるように、私は自分のマシンにモジュールを持っています:

[~]$ 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.

2.7 のインストール エラーは次のようになります。

[~]$ python2.7 -c "import bz2; print bz2.__doc__"
 Traceback (most recent call last):
  File "<string>", line 1, in <module>
 ImportError: No module named bz2

それで、私はこれらの質問を読みました: すでにインストールされていて、これは非常に良いものですが、どちらも的を射ていないようです。最初のケースでは、アドバイスは不足している部分をインストールすることであり、2 番目の質問は余分な python インストールを削除 (または参照を停止) することです。

私がやりたいことは、シンボリックリンクなどを配置して、python 2.7 インストールが bz2 の場所を認識し、pip を使用して python パッケージをインストールできるようにすることです。

ありがとう、B


編集:詳細

そのため、多くの調査の結果、パス変数が確立される方法が python 2.5 で劇的に変更されたようです (おそらく、Red Hat が更新されなかった理由)。

したがって、python 2.7 では、このフォルダーに .pth 拡張子を持つファイルを追加することで、PYTHONPATH 変数に追加できます。

/usr/local/lib/python2.7/site-packages/

これを適切に機能させるために2つの方法を試しました。

まず、Python 2.4 パス ファイルの数を 2.7 に単純にフィードしました。これにより、別のタイプのエラーが発生しました:

[~]$ python2.7 -c "import bz2; print bz2.__doc__"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: /usr/lib64/python2.4/lib-dynload/bz2.so: undefined symbol: Py_InitModule4

それで、それは何かです。

また、 /usr/lib/ にある libbz2.so ファイルへのパスを指定しようとしましたが、おなじみのエラーが発生しました。

[~]$ python2.7 -c "import bz2; print bz2.__doc__"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named bz2

私はまだ困惑していますが、私は近づいているように感じます.

プログラミング環境のセットアップ経験が豊富な人からの情報を実際に使用できます。私はコードを書くだけでずっと快適です:)

4

3 に答える 3

7

昨日同じプラットフォームでこれを行ったところ、機能しました。これが私がしたことです:

と を設定CFLAGS="-I/path/to/bz2/include"LDFLAGS="-L/path/to/bz2/lib"ます。bz2 ライブラリ パスが に設定されていることを確認してくださいLD_LIBRARY_PATHmake distcleanただし、おそらく a andを実行する必要がありconfigure && make && make installます。

失敗した場合は、setup.py を直接編集して、次のように置き換えます。

# Gustavo Niemeyer's bz2 module.
if (self.compiler.find_library_file(['/home/someuser/packages/libbz2/lib'], 'bz2')): #lib_dirs, 'bz2')):

2 行目の最後にあるコメント アウトされた部分は、setup.py 行の元の残りの部分であることに注意してください。

また、システムにインストールされたバージョンを動作させるよりも、bz2 の最新バージョンをダウンロードしてビルドし、上記のすべてを指定する方が簡単であることがわかりました。

とにかく、これは間違いなく機能します。昨日やりました:)

于 2012-12-19T16:54:34.657 に答える
1

システムにインストールされたもの以外の Python を使用している場合はいつでも、http://pypi.python.org/pypi/virtualenvを使用することを強くお勧めします。python の独自のコピーを使用して「サンドボックス」をセットアップし、新しいコピーを指すようにすべてのパスなどをやり直します。その後、pip を使用して必要なパッケージをインストールできます。

于 2012-12-23T13:51:20.240 に答える
1

提供された他の回答は便利で役に立ちますが、これが私がこれを機能させる方法です。

問題は、Python がファイルを見つけられなかったことではなく (私が思っていたように)、適切に使用できなかっただけです。そこで、bzip2 の Makefile を調べたところ、次のような行が見つかりました。

CFLAGS= -Wall -Winline -O2 -g $(BIGFILES)

-fPIC を次のように行に追加しました。

CFLAGS=-fPIC -Wall -Winline -O2 -g $(BIGFILES)

そしてワラ!それはうまくコンパイルされました。

于 2012-12-28T14:46:39.190 に答える