Невозможно импортировать модули Python только для определенного пользователя

Невозможно импортировать модули Python только для определенного пользователя

Я уже много лет пытаюсь это понять.

Когда я запускаю некоторые программы Python, они вылетают, сообщая, что определенный модуль не может быть импортирован, хотя на самом деле он установлен и должен быть импортируемым. Например:

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

Странно, что если я запускаю эти программы с sudoили даже как новый обычный пользователь, они работают нормально. Это происходит только для этого конкретного пользователя.

Я пробовал очистить .cacheи .pipв .python-eggsдомашнем каталоге запустить chmod a+rx -R /usr/сравнение всех исполняемых файлов Python с whichрабочими пользователями, но ничего не помогает. sys.pathСписок Python также идентичен.

Машина - Ubuntu Server 14.04 x64.

ОБНОВЛЯТЬ:

Думаю, я это исправил... Не знаю как, правда. Я сделал все, что перечислил в этом вопросе, и перезагрузил машину.

ЕЩЕ ОДНО ОБНОВЛЕНИЕ:

Я узнал, что вызвало это. У меня было export LD_LIBRARY_PATH="/usr/lib/plexmediaserver"в моем .bashrc. Может кто-нибудь объяснить, пожалуйста, почему это произошло?

Если я это сделаю, то не будет никаких результатов echo $LD_LIBRARY_PATH. Но если я запущу, export LD_LIBRARY_PATH="/usr/lib/plexmediaserver"то это сломает некоторые импорты Python.

решение1

Решено.

export LD_LIBRARY_PATH="/usr/lib/plexmediaserver"У меня в кармане был .bashrc.

/usr/lib/plexmediaserverимел множество динамических библиотек, включая libssl.so.1.0.0и libexpat.so.1. Поэтому они загружались вместо тех, что из /usr/libи вызывали проблемы. Эта проблема на самом деле не имеет никакого отношения к python, она в равной степени вызвала бы проблемы для любой другой программы, которая бы использовала эти библиотеки.

@slm предложил хороший способ отладки таких случаев с помощью strace. В моем случае я так и сделал strace speedtest 2>&1 | grep expat | lessи нашел доказательство загрузки неправильной библиотеки - open("/usr/lib/plexmediaserver/libexpat.so.1", O_RDONLY|O_CLOEXEC) = 7.

Я видел много людей в интернете, которые задавали подобные вопросы без каких-либо решений. Надеюсь, это кому-то поможет.

Связанный контент