3

OK、私は古い Debian VM を持っています。パッケージマネージャーは役に立ちません。いいえ、OS を更新するつもりはありません。

システムに bzip2 lib と開発ヘッダーが正しくインストールされています (これらは実際にはパッケージから取得されたものです)。

私は、システム上で絶対にPythonを使用しないことから始めます。すべて手動で削除しました。Python 2.7.5 ソースをダウンロードし、./configure --prefix=/usr. それはうまく構成されます。を実行するmakeと、正常にコンパイルされます。試してみると./python -c "import bz2; print bz2.__doc__"、うまくいき、次のように言います。

python bz2 モジュールは、bz2 圧縮ライブラリの包括的なインターフェイスを提供します。完全なファイル インターフェイス、ワン ショット (解凍) 圧縮関数、およびシーケンシャル (解凍) 圧縮の種類を実装します。

次に実行するmake testと、テスト スイート全体が正常に進行し、特に「test_bz2」テストに合格しました。

次に を実行make installすると、新しい Python バイナリが /usr/bin/ にインストールされます。

を試してみ/usr/bin/python -c "import bz2; print bz2.__doc__"ましたが、次のように失敗します:

トレースバック (最新の呼び出しが最後): ファイル ""、行 1、ImportError 内: bz2 という名前のモジュールはありません

Python を as としてビルドすることも含め、さまざまなことを試しましたが、--enable-sharedうまくいきませんでした。私は少なくとも10回試しました(毎回、すべてを完全に掃除したり、実行したりしますmake distclean)。運がない。

私が試した:PYTHONPATH="/usr/lib/python2.7"; export PYTHONPATH。まだ運がありません。

make installただし、 /usr/bin/pythonを作成するシンボリックリンクを削除し、代わりに: を実行ln -s /path/to/my/python/compile/python pythonすると、魔法のように機能します。

それで、一体何?私が作成しているこの Python バイナリは、バイナリがコンパイル ディレクトリに存在する場合にしか検索できず、通常の実稼働インストール場所に配置された場合には検索できないのはなぜですか? 私は何が欠けていますか?

私は、Python インポート呼び出しをテストするまでconfiguremakeプロセス全体でルートになっています。make install

私は再びゼロから始めました(今回は--enable-sharedbtwでコンパイルしています)、コンパイルディレクトリにあるだけでなく、build/lib.linux-x86_64-2.7/bz2.so実行するmake installと、そのファイルが/usr/lib/python2.7/lib-dynload/bz2.so.

lib-dynload を読んでみましたが、Python プログラム (CLI のデフォルト構成など) がモジュールのインポートをプルするように指示できるようにする必要があるかどうかを判断できませんでした。 lib-dynloadから、またはdynloadのmake install代わりにどこに置くべきかを伝える他の場所またはオプションがある場合。

それでも、バイナリを見つけて正常にロードできるのに、バイナリを見つけられない (またはロードできない) 理由については説明があり/path/to/compilation/pythonません。bz2.so/usr/bin/python/usr/lib/python2.7/lib-dynload/bz2.so

インストールがディレクトリ/usr/lib/pythonを指すシンボリックリンクのように作成されないという事実と関係があるのではないかと思いました。/usr/lib/python2.7しかし、シンボリックリンクを作成しましたが、まだうまくいきません。

私はまだここで迷っています。

4

1 に答える 1

2

長い一連の Twitter 会話を介して、ある種の無回答の回答が偶然に到達したように見えます。

ここで別のスタック オーバーフローの質問を提出して、なぜこの問題の解決策が見つかったのかを尋ねました

後世のために、今のところ解決策は、PYTHONHOME環境変数をに設定すること/usrであり、すべてが機能し始めます。不可解な部分は、PYTHONHOME を {prefix} にデフォルト設定する必要があるとドキュメントに記載されていることです/usr。では、なぜ手動で設定する必要があるのでしょうか?

実行python-config --prefixすると、 {prefix} のデフォルトが実際/usr/binには で/usrあり、指定したものとは異なることがわかります。これにより、奇妙なことに、デフォルトをオーバーライドしてデフォルトに戻す必要があります。

于 2013-07-15T19:27:58.360 に答える