我在/etc/bash.bashrc
设置了环境variablesLIBRARY_PATH
在最后添加了export LIBRARY_PATH=/usr/local/cuda/lib64:$LIBRARY_PATH
。
当我尝试从python获取envvariables时:
ipython import os print os.getenv('LIBRARY_PATH')
一切正常,它打印/usr/local/cuda/lib64:
但是当我用sudo
调用ipython时:
sudo ipython import os pront os.getenv('LIBRARY_PATH')
我什么也得不到 我想这是关于envvariables横跨用户,但是什么是ditails? 我在/etc/bash.bashrc
中设置了LIBRARY_PATH
,它被认为是“系统宽度的bashrc文件”。
那么怎样才能在python中使用sudo来获得正确的envvariables呢?
如果你想sudo
通过环境变量(这通常被认为是一个安全隐患),使用sudo -E
。
请注意,它是执行bashrc文件中的命令的bash
。 ipython
不是bash
,显然, sudo
不会启动一个shell进程,更不用说是一个bash进程,只是为了运行你要求它运行的命令。 所以你的bashrc文件都不会被sudo
命令或sudo
子进程执行。 当然,你可以告诉sudo
运行一个bash进程:
sudo bash -c ipython
但是,如果bash
检测到它正在sudo进程中运行,则不执行启动文件。
有关sudo
如何清理环境的更多信息,请键入man 5 sudoers
并跳转到Command environment
部分。
如果在/root/.bash_profile中设置了环境变量,那么在使用sudo时可能会得到所需的行为。