Estou instalando o Python 2.7 no CentOS 5. Criei e instalei o Python da seguinte maneira
./configure --enable-shared --prefix=/usr/local
make
make install
Quando tento executar / usr / local / bin / python, recebo esta mensagem de erro
/usr/local/bin/python: error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory
Quando executo o ldd em / usr / local / bin / python, recebo
ldd /usr/local/bin/python
libpython2.7.so.1.0 => not found
libpthread.so.0 => /lib64/libpthread.so.0 (0x00000030e9a00000)
libdl.so.2 => /lib64/libdl.so.2 (0x00000030e9200000)
libutil.so.1 => /lib64/libutil.so.1 (0x00000030fa200000)
libm.so.6 => /lib64/libm.so.6 (0x00000030e9600000)
libc.so.6 => /lib64/libc.so.6 (0x00000030e8e00000)
/lib64/ld-linux-x86-64.so.2 (0x00000030e8a00000)
Como digo ao Python onde encontrar o libpython?
gdb
partir da linha de comando e o LD_LIBRARY_PATH estiver configurado corretamente no terminal? Caso contrário, você provavelmente precisará configurar o LD_LIBRARY_PATH no seu.gdbinit
arquivo. Veja esta resposta para obter mais informações: stackoverflow.com/a/7041845/156771Vestindo meu chapéu de coveiro ...
A melhor maneira que encontrei para resolver isso é em tempo de compilação. Como você é o único prefixo de configuração, de qualquer maneira, é possível dizer explicitamente ao executável onde encontrar suas bibliotecas compartilhadas. Diferentemente do OpenSSL e de outros pacotes de software, o Python não fornece diretrizes de configuração agradáveis para lidar com caminhos alternativos da biblioteca (nem todo mundo é root que você conhece ...) No caso mais simples, tudo o que você precisa é o seguinte:
Ou se você preferir a versão não-linux:
O
rpath
sinalizador " " informa ao python que ele possui bibliotecas de tempo de execução necessárias nesse caminho específico. Você pode levar essa idéia adiante para lidar com dependências instaladas em um local diferente dos locais padrão do sistema. Por exemplo, em meus sistemas, já que não tenho acesso root e preciso fazer instalações Python quase completamente independentes, minha linha de configuração fica assim:Neste caso estou compilando as bibliotecas que usos Python (como
ffi
,readline
, etc) em umextlib
diretório dentro da própria árvore de diretórios python. Dessa forma, eu posso tar o diretório python - $ {PYTHON_VERSION} e pousá-lo em qualquer lugar e ele "funcionará" (desde que você não tenha conflitoslibc
oulibm
conflitos). Isso também ajuda ao tentar executar várias versões do Python na mesma caixa, pois você não precisa mudar constantementeLD_LIBRARY_PATH
ou se preocupar em escolher a versão errada da biblioteca Python.Edit: Esqueci de mencionar, a compilação se queixará se você não definir a
PYTHONPATH
variável de ambiente como o seu prefixo e falhar na compilação de alguns módulos, por exemplo, para estender o exemplo acima, definaPYTHONPATH
o prefixo usado no exemplo acima exemplo comexport PYTHONPATH=/apps/python-${PYTHON_VERSION}
...fonte
$PYTHON_VERSION
?$PYTHON_VERSION
após a configuração. Mesmo com o$PYTHON_VERSION
conjunto, no entanto, o compilador reclamaPython build finished successfully! The necessary bits to build these optional modules were not found: _bz2 _curses _curses_panel _gdbm _lzma _sqlite3 _tkinter readline
make
comando e em outros comandos de instalação?/apps/python-${PYTHON_VERSION}/extlib
para garantir que suas bibliotecas e cabeçalhos estejam no local apropriado para o processo de criação do Python encontrar. Quanto aos pacotes no nível do sistema, você provavelmente estaria confiando em um usuário root para instalá-los antes. Ou encontrar uma alternativa que pode ser compilado e caiu noextlib
Eu tive o mesmo problema e resolvi-o desta maneira:
Se você sabe onde reside o libpython, eu acho que seria
/usr/local/lib/libpython2.7.so.1.0
no seu caso, você pode simplesmente criar um link simbólico para ele:Em seguida, tente executar
ldd
novamente e veja se funcionou.fonte
Instalei o Python 3.5 da Software Collections no mínimo no CentOS 7. Tudo funcionou bem por conta própria, mas vi o erro da biblioteca compartilhada mencionado nesta pergunta quando tentei executar um script CGI simples:
Eu queria uma solução permanente em todo o sistema que funcionasse para todos os usuários, de modo a excluir a adição de instruções de exportação em arquivos .profile ou .bashrc. Existe uma solução de uma linha, baseada na página de soluções da Red Hat . Obrigado pelo comentário que aponta:
Após uma reinicialização, tudo fica bem no shell, mas às vezes meu servidor da web ainda reclama. Há outra abordagem que sempre funcionou para o shell e o servidor e é mais genérica. Vi a solução aqui e percebi que também é mencionada em uma das respostas aqui! De qualquer forma, no CentOS 7, estas são as etapas:
Que na minha máquina tinha apenas:
Então eu criei um novo arquivo:
E acrescentou:
E para recriar manualmente o cache:
É isso aí, os scripts funcionam bem!
Esta foi uma solução temporária, que não funcionou nas reinicializações:
A opção -v (detalhada) era apenas para ver o que estava acontecendo. Eu vi que ele fez: / opt / rh / rh-python35 / root / usr / lib64: libpython3.so.rh-python35 -> libpython3.so.rh-python35 libpython3.5m.so.rh-python35-1.0 -> libpython3.5m.so.rh-python35-1.0
Este erro em particular foi embora. Aliás, eu tive que
chown
o usuário apache para se livrar de um erro de permissão depois disso.Observe que eu usei o find para localizar o diretório da biblioteca. Você também pode fazer:
Que na minha VM retorna:
Qual é o caminho que preciso fornecer ao ldconfig, como mostrado acima.
fonte
#!/bin/bash
esource scl_source enable rh-python35
nele. access.redhat.com/solutions/527703No Solaris 11
Use
LD_LIBRARY_PATH_64
para resolver o link simbólico para bibliotecas python.No meu caso, para python3.6
LD_LIBRARY_PATH
não funcionou, masLD_LIBRARY_PATH_64
funcionou.Espero que isto ajude.
Saudações
fonte
Isso funcionou para mim ...
fonte
Eu instalei usando o comando:
Agora, como usuário root:
Então eu tentei executar python e recebi o erro:
Então, eu saí do usuário root e tentei novamente executar o Python e funcionou com sucesso.
fonte
Tudo o que precisa é a instalação da instalação dos arquivos dev libpython [3 ou 2].
fonte
basta instalar o python-lib. (python27-lib). Ele instalará o libpython2.7.so1.0. Não precisamos definir nada manualmente.
fonte