Falha ao importar módulos python apenas em um usuário específico

2

Estou tentando descobrir isso há anos.

Quando executo certos programas em Python, eles falham dizendo que determinado módulo não pode ser importado, enquanto está realmente instalado e deve ser importável. Por exemplo:

  • pip3 falharia com ImportError: cannot import name 'HTTPSHandler
  • python2 speedtest-cli com ImportError: No module named expat; use SimpleXMLTreeBuilder instead
  • python3 speedtest-cli com ImportError: cannot import name 'HTTPSConnection'
  • virtualenv -p python3 myenv com OSError: Command /home/myuser/myenv/bin/python3 -c "import sys, pip; sys...d\"] + sys.argv[1:]))" setuptools pip failed with error code 1

O que é bizarro é que, se eu executo esses programas com sudo ou mesmo como um novo usuário comum, eles funcionam bem. Acontece apenas para esse usuário específico.

Eu tentei limpar .cache , .pip e .python-eggs no diretório inicial, executando chmod a+rx -R /usr/ comparando todo o executável python com which com usuários ativos, mas nada ajuda. python sys.path list também é idêntico.

A máquina é - Ubuntu Server 14.04 x64.

ATUALIZAÇÃO:

Acho que consertei ... Não sei como. Eu fiz tudo o que listei nesta pergunta e reiniciei a máquina.

OUTRA ATUALIZAÇÃO:

Eu aprendi o que causou isso. Eu tinha export LD_LIBRARY_PATH="/usr/lib/plexmediaserver" no meu .bashrc . Alguém poderia explicar por favor, por que isso aconteceria?

Não há resultados se eu fizer echo $LD_LIBRARY_PATH . Mas se eu executar o export LD_LIBRARY_PATH="/usr/lib/plexmediaserver" , ele quebrará algumas importações de python.

    
por grisevg 16.10.2014 / 03:48

1 resposta

2

Resolvido.

Eu tinha export LD_LIBRARY_PATH="/usr/lib/plexmediaserver" no meu .bashrc .

/usr/lib/plexmediaserver tinha muitas bibliotecas dinâmicas, incluindo libssl.so.1.0.0 e libexpat.so.1 . Então eles foram carregados em vez dos de /usr/lib e estavam causando problemas. Este problema não tem nada a ver com python, na verdade, seria igualmente causar problemas para qualquer outro programa que iria retransmitir essas bibliotecas.

@slm sugeriu uma boa maneira de depurar esses casos usando strace . No meu caso, eu fiz strace speedtest 2>&1 | grep expat | less e descobri que a biblioteca errada estava sendo carregada - open("/usr/lib/plexmediaserver/libexpat.so.1", O_RDONLY|O_CLOEXEC) = 7 .

Eu tenho visto muitas pessoas na internet postando perguntas parecidas sem nenhuma solução. Então espero que isso ajude alguém.

    
por 16.10.2014 / 04:41