无法仅在特定用户上导入 python 模块

无法仅在特定用户上导入 python 模块

多年来我一直试图弄清楚这一点。

当我运行某些 python 程序时,它们会崩溃,说某些模块无法导入,而它实际上已安装并且应该是可导入的。例如:

  • pip3会崩溃ImportError: cannot import name 'HTTPSHandler
  • python2 speedtest-cliImportError: No module named expat; use SimpleXMLTreeBuilder instead
  • python3 speedtest-cliImportError: cannot import name 'HTTPSConnection'
  • virtualenv -p python3 myenvOSError: 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工作用户进行比较,但没有任何帮助。 pythonsys.path列表也是相同的。

机器是 - 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.0libexpat.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

我在互联网上看到很多人发布类似的问题,但根本没有解决方案。所以希望这会对某人有所帮助。

相关内容