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 インポート呼び出しをテストするまでconfigure
のmake
プロセス全体でルートになっています。make install
私は再びゼロから始めました(今回は--enable-shared
btwでコンパイルしています)、コンパイルディレクトリにあるだけでなく、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
しかし、シンボリックリンクを作成しましたが、まだうまくいきません。
私はまだここで迷っています。