PKu*_*uhn 4 python sudo environment-variables pip
当我执行
which pip3
Run Code Online (Sandbox Code Playgroud)
它指向
/usr/.../anaconda3/bin/pip3
Run Code Online (Sandbox Code Playgroud)
然而,当我跑
sudo which pip3
Run Code Online (Sandbox Code Playgroud)
结果是
/usr/bin/pip3
Run Code Online (Sandbox Code Playgroud)
这个问题来自哪里,我如何实现sudo pip也指向/usr/.../anaconda3/bin/pip3?
sudo在运行任何命令之前清理环境。在此过程中,如果指令的值secure_path被设置,它将被用作PATH为sudo命令,而不是当前PATH。
在我的系统中:
% sudo grep -E 'secure_path' /etc/sudoers
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Run Code Online (Sandbox Code Playgroud)
所以我有:
% echo $PATH
/home/foobar/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
% sudo bash -c 'echo $PATH'
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Run Code Online (Sandbox Code Playgroud)
您可以做些什么来保留当前路径或添加/usr/.../anaconda3/bin到sudo's PATH:
传入命令PATH的环境which:
sudo PATH="$PATH" which pip3
Run Code Online (Sandbox Code Playgroud)
任何想要的PATH也可以设置。
运行时保持当前环境sudo:
sudo -E which pip3
Run Code Online (Sandbox Code Playgroud)secure_path通过将 a#放在前面禁用该值或删除该行以保持当前PATH:
# Defaults secure_path="....."
Run Code Online (Sandbox Code Playgroud)
相反,您还可以修改secure_path以在开头添加/usr/.../anaconda3/bin到它。
添加PATH到env_keep指令以保持PATH在sudo提供的环境中:
Defaults env_keep += "PATH"
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
3989 次 |
| 最近记录: |