Python não reconhece LD_LIBRARY_PATH?

6

Estou tentando instalar o Python2.7 no chromebook cr-48 no modo de desenvolvedor e encarar um problema estranho que estou tendo dificuldade em procurar uma solução no google. Primeiro, alguns antecedentes .. a partição raiz é montada somente para leitura, então eu tenho instalado pacotes em / usr / local, que é um ponto de montagem separado que é gravável. Existe uma maneira de forçar a própria partição raiz a readwrite (com algumas desvantagens menores), mas eu decidi não seguir esse caminho. Eu tenho baixado pacotes do archlinux e os extrai em / usr / local e vários deles têm funcionado muito bem até agora. Eu basicamente extrai o arquivo .tar.xz da seguinte forma:

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

Isso basicamente faz com que os arquivos destinados a / usr estejam em / usr / local. Eu exporto /usr/local/lib à frente de /usr/lib sob o LD_LIBRARY_PATH e tenho vários pacotes para funcionar bem dessa maneira. Por algum motivo, o python não consegue reconhecer isso, embora não tenha certeza do que o causa. Depois de expandir o pacote python 2.7 que obtive do site do archlinux , consegui iniciar o shell do python e uma simples impressão funcionou bem. Eu então tentei instalar o setuptools, então baixei o código do pypy e tentei rodar o sudo /usr/local/python2 setup.py install , mas ele continuou me dando o seguinte erro:

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

O arquivo libpython2.7.so.1.0 está no diretório /usr/local/lib/ , que está em LD_LIBRARY_PATH . Uma rápida execução do ldd mostra isso claramente:

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)

Também verifiquei /etc/ld.so.conf e também /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

Instalei strace (e perl desde que ele esteja listado como dependente) e executei o comando de instalação em strace , que mostra a saída abaixo interessante (veja que NÃO está procurando /usr/local/lib/libpython2.7.so.1.0 em qualquer lugar) :

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 +++

Eu sempre obtive caminhos de instalação personalizados para funcionar apenas incluindo o caminho da lib em LD_LIBRARY_PATH e exportando-o, então não tenho certeza do que mais eu poderia estar perdendo aqui. Qualquer ajuda é muito apreciada.

    
por haridsv 27.10.2013 / 19:18

1 resposta

2

Além de LD_LIBRARY_PATH , você provavelmente precisará definir algumas variáveis de ambiente específicas do Python, como PYTHONHOME & %código%. Veja a página de manual do Python para detalhes.

Depois de instalar novas bibliotecas, talvez seja necessário executar PYTHONPATH como root para atualizar o arquivo de cache da biblioteca.

Outra opção para tentar é definir a variável de ambiente ldconfig ou talvez até mesmo usar as opções RUN_LD_PATH ou -rpath compilador / vinculador.

Você também pode tentar -rpath-link de todos os seus executáveis e bibliotecas em prelink , embora isso possa ser entediante, pois provavelmente os diretórios não estão listados em /usr/local . Talvez apenas comece com o seu executável python.

    
por 30.10.2013 / 13:01

Tags