web-dev-qa-db-ja.com

特定のユーザーでのみpythonモジュールのインポートに失敗する

私は何年もの間これを理解しようとしてきました。

特定のpythonプログラムを実行すると、実際にインストールされてインポ​​ート可能である必要があるのに、特定のモジュールをインポートできないと言ってクラッシュします。例:

  • pip3ImportError: 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を比較してみましたpython sys.pathリストも同じです。

マシンは-UbuntuServer 14.04x64です。

更新:

私はそれを修正したと思います...しかし、どうすればいいのかわかりません。この質問にリストしたすべてのことを実行し、マシンを再起動しました。

別の更新:

私はそれを引き起こした原因を学びました。 export LD_LIBRARY_PATH="/usr/lib/plexmediaserver".bashrcがありました。誰かが説明してもらえますか、なぜこれが起こるのでしょうか?

echo $LD_LIBRARY_PATHを実行しても、結果はありません。しかし、export LD_LIBRARY_PATH="/usr/lib/plexmediaserver"を実行すると、いくつかのpythonインポートが壊れます。

2
grisevg

解決しました。

_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

私はインターネット上で多くの人々が全く解決策なしで同様の質問を投稿しているのを見てきました。うまくいけば、これは誰かを助けるでしょう。

2
grisevg