403-537-5434

在macOS系统上用pip安装Python包的时候,一般会采用sudo命令进行安装。但是直接输入命令 sudo pip install foo 的时候,会提示:

The directory ‘/Users/XXX/Library/Logs/pi’ or its parent directory is not owned by the current user and the debug log has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want the -H flag.

这里告诉我们需要在sudo命令后添加-H选项,因为某个目录的所有者(一般为个人用户)与执行目录的用户(这里为root用户)不一致。

通过查询相关文档可以发现,-H选项的作用是将$HOME环境变量设置为sudo命令的目标用户(默认为root)的$HOME环境变量。比如说某个个人用户alice其$HOME环境变量为 $HOME=/home/alice ,在使用sudo命令加上-H选项时,其$HOME环境变量将变为 $HOME=/root 。

而pip在安装Python包的时候会调用$HOME环境变量,将日志文件输出到 $HOME/Library/Logs/... 目录,而直接使用root命令执行pip install的时候有时候并不会将$HOME环境变量改为root用户的$HOME环境变量。这样就会导致写入文件目录的所有者与当前用户不一致的情况,故出现上述警告。所以,加上选项-H就可以解决这个问题。

最后,在这里再补充一下,为什么要强调-H选项是将$HOME环境变量设置为目标用户的值。目标用户难道不就是root用户吗?确实,我们通常情况下使用sudo都是为了使用root用户来执行命令,但是其实sudo用户也可以设置为通过其它用户执行命令。这可以通过-u选项来实现,在-u选项后输入用户名或用户的PID就可以以相应的用户执行命令。比如,命令 sudo -u foo ... 就可以以foo用户来执行相应的命令。