Kar*_*ter 8 python environment sudo environment-variables
我有以下情况(通过以下命令进行验证):
__init__.pyx中现有的python cat 文件PYTHONPATH变量availble登录用户和sudo我想调用~/test.py与
#!/usr/bin/python
import sys;print sys.path;
import mount_utils
print "Hello World!"
Run Code Online (Sandbox Code Playgroud)
与sudo python ~/test.py这导致
Traceback (most recent call last):
File "/home/richter/test.py", line 3, in <module>
import mount_utils
ImportError: No module named mount_utils
Run Code Online (Sandbox Code Playgroud)
目录中的目录PYTHONPATH不在sys.path当前目录中.python ~/test.py按预期工作(打印sys.path和Hello World!控制台).sudo -E python ~/test.py失败并出现同样的错误.我不明白
PYTHONPATH在sudo echo输出中打印变量,为什么模块不可用sudo -E不保护环境(据我从理解man sudo和https://docs.python.org/2/using/cmdline.html不应该有什么区别python bla和sudo -E python bla)为什么我会收到此错误?
详细情况验证:
$ env | grep PYTHONPATH
PYTHONPATH=:/home/richter/scripts/python:/home/richter/scripts/python/installsystem:/home/richter/scripts/python/lib
$ sudo env | grep PYTHONPATH
$ LANG=C stat /home/richter/scripts/python/lib/mount_utils.py
File: '/home/richter/scripts/python/lib/mount_utils.py'
Size: 8374 Blocks: 24 IO Block: 4096 regular file
Device: 80ch/2060d Inode: 20972052 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ richter) Gid: ( 1000/ richter)
Access: 2014-08-19 17:06:37.542787417 +0200
Modify: 2014-07-31 10:54:14.709468668 +0200
Change: 2014-07-31 10:54:14.729478917 +0200
Birth: -
$ LANG=C stat /home/richter/scripts/python/lib/__init__.py
File: '/home/richter/scripts/python/lib/__init__.py'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 80ch/2060d Inode: 20972114 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ richter) Gid: ( 1000/ richter)
Access: 2014-08-09 19:49:44.345055332 +0200
Modify: 2014-05-07 06:57:31.434851243 +0200
Change: 2014-06-25 03:17:29.569551147 +0200
Birth: -
Run Code Online (Sandbox Code Playgroud)
我没有从相似的未解答的问题中得到任何想法为什么PYTHONPATH被忽略了?
编辑1:考虑如何为我的linux系统下的每个人设置环境变量?而事实上echo ...是一个相当不错的方法,以确保ENV变量是否设置,我把export PYTHONPATH="$PYTHONPATH:/home/richter/scripts/python:/home/richter/scripts/python/installsystem:/home/richter/scripts/python/lib"在
/etc/profile/etc/profile.d/python_py.sh/root/.bashrc/home/richter/.bashrc现在PYTHONPATH是(除上述情况外)env在sudo -i提示中可用,但不在sudo env | grep PYTHONPATH.sudo python test.py由于同样的错误仍然失败,即我的问题仍然存在.
也export PYTHONPATH="/home/richter/scripts/python:/home/richter/scripts/python/installsystem:/home/richter/scripts/python/lib" && sudo -E python test.py由于相同的错误而失败.
您需要将PYTHONPATH环境变量添加到sudoers env_keep.
运行:( 以安全的方式
sudo visudo打开/etc/sudoers文件).
添加此行:
Defaults env_keep += "PYTHONPATH".
现在:wq,这将PYTHONPATH在运行时保留变量sudo
| 归档时间: |
|
| 查看次数: |
15023 次 |
| 最近记录: |