無法僅在特定使用者上匯入 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

我在網路上看到很多人發布類似的問題,但根本沒有解決方案。所以希望這對某人有幫助。

相關內容