多年來我一直試圖弄清楚這一點。
當我運行某些 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
工作用戶進行比較,但沒有任何幫助。 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.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
。
我在網路上看到很多人發布類似的問題,但根本沒有解決方案。所以希望這對某人有幫助。