Python이 LD_LIBRARY_PATH를 인식하지 못합니까?

Python이 LD_LIBRARY_PATH를 인식하지 못합니까?

개발자 모드에서 cr-48 크롬북에 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아치리눅스 사이트, 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 관련 환경 변수를 설정해야 할 수도 있습니다 . 보다PYTHONHOMEPYTHONPATH파이썬 매뉴얼 페이지더 알아보기.

ldconfig새 라이브러리를 설치한 후 루트로 실행하여 라이브러리 캐시 파일을 업데이트 해야 할 수도 있습니다 .

시도해 볼 수 있는 또 다른 옵션은 환경 변수를 설정 RUN_LD_PATH하고 어쩌면 -rpath컴파일러 -rpath-link/링커 옵션을 사용하는 것입니다.

디렉토리가 에 나열되지 않을 수 있으므로 지루할 수 있지만 prelink에서 모든 실행 파일과 라이브러리를 사용해 볼 수도 있습니다 . 아마도 Python 실행 파일로 시작해 보세요./usr/local/etc/prelink.conf

관련 정보