開発者モードでは、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/lib
LD_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
私はそれをインストールしstrace
(perl
依存関係としてリストされているので)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固有の環境変数を設定する必要があるかもしれません。よりPYTHONHOME
PYTHONPATH
Pythonのマニュアルページもっと学ぶ。
ldconfig
新しいライブラリをインストールしたら、rootとして実行してライブラリキャッシュファイルを更新する必要があるかもしれません。
もう一度試すことができるもう1つのオプションは、環境変数を設定し、RUN_LD_PATH
おそらく-rpath
コンパイラ-rpath-link
/リンカーオプションを使用することです。
ディレクトリが表示されない可能性があるため、退屈することがありますが、prelink
すべての実行可能ファイルとライブラリを試してみることもできます。おそらくPythonの実行可能ファイルから始めましょう。/usr/local
/etc/prelink.conf