別のヒント:
sudo echo $PYTHONPATH:
/home/name/lib/py
うまくいきません。シェルは次のように解釈します:
1) 環境変数から $PYTHONPATH を展開します。例:/usr/lib/python
2) 「sudo echo /usr/lib/python」を実行
私の場合の修正は、 Defaults !env_reset を削除することでした sudoers より。
しかし、 Defaults env_keep += "PYTHONPATH" を保持する必要がありました sudoers で。
実際に Defaults env_reset を追加しました (環境変数をリセットします)が、 env_keep のためにまだ機能します .
env_keep のようです および !env_reset 互いに競合しますが、それは単なる推測です.
したがって、プロセス全体:
<オール>export PYTHONPATH=/your/custom/path を追加 ~/.bashrc まで または /etc/bash.bashrc PYTHONPATH を追加 Defaults env_keep += "ENV1 ENV2 ..." まで sudoers ファイル内Defaults !env_reset を削除 存在する場合は sudoers ファイルから
PYTHONPATH を操作する代わりの方法 :
- virtualenv
- distutils
PATH についても同様です。 環境保護フラグ -E を渡しているにもかかわらず、スーパー ユーザー環境にも持ち込まれません。 .
他の変更を加えずに、この sudo コマンドを使用しています:
sudo -HE env PATH=$PATH PYTHONPATH=$PYTHONPATH ./bin/myscript
これは (私にとって) 有効な代替アプローチであるため、ここで共有したいと思います。