PythonはLD_LIBRARY_PATHを認識しませんか?

PythonはLD_LIBRARY_PATHを認識しませんか?

開発者モードでは、cr-48 ChromebookにPython2.7をインストールしようとしていますが、奇妙な問題に直面して解決策を見つけるためにインターネット検索に苦労しています。まず、いくつかの背景知識があります。ルートパーティションは読み取り専用でマウントされているため、別の書き込み可能なマウントポイント/usr/localの下にパッケージをインストールしました。ルートパーティション自体を強制的に読み書きする方法がありますが(少し欠点があります)、私はそのパスに従わないことにしました。私はArchlinuxパッケージをダウンロードして/usr/localに解凍しました。デフォルトでは、.tar.xz次のようにファイルを抽出します。

xz -dc package.tar.xz | sudo tar --strip-components=1 -C /usr/local -xvf -

これはデフォルトで/ usrに向かうファイルを/ usr / localに削除します。事前に/usr/local/libエクスポートして正常に動作するいくつかのパッケージを入手しました。何らかの理由でPythonはそれを認識するためにロードされません。原因が何であるかを完全に確信することはできません。私が得たPython 2.7パッケージを拡張した後/usr/libLD_LIBRARY_PATHアーチLinuxサイト、Pythonシェルを正常に起動でき、簡単な印刷がうまく機能します。その後、setuptoolsをインストールしようとしたので、pypyからソースコードをダウンロードして実行しようとしましたが、次のsudo /usr/local/python2 setup.py installエラーが発生しました。

/usr/local/bin/python2: error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory

ファイルはlibpython2.7.so.1.0実際に/usr/local/lib/そこにありますLD_LIBRARY_PATH。 lddをすばやく実行すると、以下が明確に表示されます。

chronos@localhost /tmp/setuptools-1.1.6 $ ldd /usr/local/bin/python2
        linux-gate.so.1 (0x777a9000)
        libpython2.7.so.1.0 => /usr/local/lib/libpython2.7.so.1.0 (0x77610000)
        libpthread.so.0 => /lib/libpthread.so.0 (0x775ee000)
        libc.so.6 => /lib/libc.so.6 (0x77464000)
        libdl.so.2 => /lib/libdl.so.2 (0x77460000)
        libutil.so.1 => /lib/libutil.so.1 (0x7745b000)
        libm.so.6 => /lib/libm.so.6 (0x77436000)
        /lib/ld-linux.so.2 (0x777aa000)

私も確認し、/etc/ld.so.confそこにいます/usr/local/lib

chronos@localhost /tmp/setuptools-1.1.6 $ cat /etc/ld.so.conf 
# ld.so.conf autogenerated by env-update; make all changes to
# contents of /etc/env.d directory
/lib
/usr/lib
/usr/local/lib
/usr/lib/opengl/xorg-x11/lib

私はそれをインストールしstraceperl依存関係としてリストされているので)installコマンドを実行しましたが、次の興味深いstrace出力が表示されました(どこにも見えなかったことに注意してください/usr/local/lib/libpython2.7.so.1.0)。

chronos@localhost /tmp/setuptools-1.1.6 $ sudo strace /usr/local/bin/python2 setup.py installPassword: 
execve("/usr/local/bin/python2", ["/usr/local/bin/python2", "setup.py", "install"], [/* 16 vars */]) = 0
brk(0)                                  = 0x9b3c000
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x776e6000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=37049, ...}) = 0
mmap2(NULL, 37049, PROT_READ, MAP_PRIVATE, 3, 0) = 0x776dc000
close(3)                                = 0
open("/lib/tls/i686/sse2/libpython2.7.so.1.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/lib/tls/i686/sse2", 0x7fd88d90) = -1 ENOENT (No such file or directory)
open("/lib/tls/i686/libpython2.7.so.1.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/lib/tls/i686", 0x7fd88d90)     = -1 ENOENT (No such file or directory)
open("/lib/tls/sse2/libpython2.7.so.1.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/lib/tls/sse2", 0x7fd88d90)     = -1 ENOENT (No such file or directory)
open("/lib/tls/libpython2.7.so.1.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/lib/tls", 0x7fd88d90)          = -1 ENOENT (No such file or directory)
open("/lib/i686/sse2/libpython2.7.so.1.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/lib/i686/sse2", 0x7fd88d90)    = -1 ENOENT (No such file or directory)
open("/lib/i686/libpython2.7.so.1.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/lib/i686", 0x7fd88d90)         = -1 ENOENT (No such file or directory)
open("/lib/sse2/libpython2.7.so.1.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/lib/sse2", 0x7fd88d90)         = -1 ENOENT (No such file or directory)
open("/lib/libpython2.7.so.1.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/lib", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
open("/usr/lib/tls/i686/sse2/libpython2.7.so.1.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/tls/i686/sse2", 0x7fd88d90) = -1 ENOENT (No such file or directory)
open("/usr/lib/tls/i686/libpython2.7.so.1.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/tls/i686", 0x7fd88d90) = -1 ENOENT (No such file or directory)
open("/usr/lib/tls/sse2/libpython2.7.so.1.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/tls/sse2", 0x7fd88d90) = -1 ENOENT (No such file or directory)
open("/usr/lib/tls/libpython2.7.so.1.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/tls", 0x7fd88d90)      = -1 ENOENT (No such file or directory)
open("/usr/lib/i686/sse2/libpython2.7.so.1.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/i686/sse2", 0x7fd88d90) = -1 ENOENT (No such file or directory)
open("/usr/lib/i686/libpython2.7.so.1.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/i686", 0x7fd88d90)     = -1 ENOENT (No such file or directory)
open("/usr/lib/sse2/libpython2.7.so.1.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/sse2", 0x7fd88d90)     = -1 ENOENT (No such file or directory)
open("/usr/lib/libpython2.7.so.1.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/usr/lib", {st_mode=S_IFDIR|0755, st_size=20480, ...}) = 0
writev(2, [{"/usr/local/bin/python2", 22}, {": ", 2}, {"error while loading shared libra"..., 36}, {": ", 2}, {"libpython2.7.so.1.0", 19}, {": ", 2}, {"cannot open shared object file", 30}, {": ", 2}, {"No such file or directory", 25}, {"\n", 1}], 10/usr/local/bin/python2: error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory
) = 141
exit_group(127)                         = ?
+++ exited with 127 +++

私は常にlibパスを含み、エクスポートしてカスタムLD_LIBRARY_PATHインストールパスを取得します。したがって、ここで欠けているものが何であるかよくわかりません。どんな助けでも大変感謝します。

ベストアンサー1

また、&LD_LIBRARY_PATHなどの一部のPython固有の環境変数を設定する必要があるかもしれません。よりPYTHONHOMEPYTHONPATHPythonのマニュアルページもっと学ぶ。

ldconfig新しいライブラリをインストールしたら、rootとして実行してライブラリキャッシュファイルを更新する必要があるかもしれません。

もう一度試すことができるもう1つのオプションは、環境変数を設定し、RUN_LD_PATHおそらく-rpathコンパイラ-rpath-link/リンカーオプションを使用することです。

ディレクトリが表示されない可能性があるため、退屈することがありますが、prelinkすべての実行可能ファイルとライブラリを試してみることもできます。おそらくPythonの実行可能ファイルから始めましょう。/usr/local/etc/prelink.conf

おすすめ記事