特定のユーザーのみで 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ホームディレクトリで、すべての Python 実行可能ファイルを作業中のユーザーと比較してみましたが、何も役に立ちませんでした。Pythonリストも同じです。.pip.python-eggschmod a+rx -R /usr/whichsys.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/plexmediaserverlibssl.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

インターネット上では、同じような質問を投稿している人が大勢いますが、解決策はまったくありません。ですから、これが誰かの役に立つことを願っています。

関連情報