奇怪的 PYTHONPATH 行为作为 sudo (Ubuntu)

Strange PYTHONPATH behavior as sudo (Ubuntu)

我遇到了关于 python unicode 的问题,所以我在 /usr/local/bin/python 上重新安装了 python,并使用选项“--enable-unicode=ucs4”。我在 ~/.bashrc 中添加了 python 模块的所有路径,当我 运行 作为普通用户时,我可以导入模块,但是当我使用 sudo 时,我不能。

iury@buzios:~$ /usr/local/bin/python
Python 2.7.6 (default, Aug 20 2015, 11:57:25) 
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>>  
iury@buzios:~$ sudo /usr/local/bin/python
Python 2.7.6 (default, Aug 20 2015, 11:57:25) 
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named numpy
>>> 

顾名思义,环境变量已分配给您自己的用户。这意味着如果您 运行ning 程序作为 root(使用 sudo),他们将不会 "assigned" 到该程序,因为它是 运行ning 在 root 用户的环境中。解决方法是在 sudo 命令之后设置环境变量,如下所示:sudo env PATH=$PATH VAR1=SOME_VALUE VAR2=SOME_VALUE

正如 this 问题中的答案所示,您可以在 ./bashrc 中添加此导出作为解决方法:

alias sudo='sudo env PYTHONPATH=[PATH] PYTHON=[OTHERPATH] ... ./thescript.py

此外,如评论中所述,确保您需要 运行 python 作为 sudo,因为在不需要时不建议这样做。