尝试使用pip安装virtualenv后
$ pip install virtualenv
我收到了拒绝权限
IOError: [Errno 13] Permission denied: '/Library/Python/2.7/site-packages/virtualenv.py'
所以我用sudo来安装virtualenv
$ sudo pip install virtualenv
然后出现警告:
目录'/ Users / petertao / Library / Caches / pip / http'或其父目录 目录不归当前用户所有,并且缓存已经存在 禁用。请检查该目录的权限和所有者。如果 用sudo执行pip,你可能想要sudo的-H标志。
目录'/ Users / petertao / Library / Caches / pip'或其父目录 目录不属于当前用户和缓存轮 禁用。检查该目录的权限和所有者。如果 用sudo执行pip,你可能想要sudo的-H标志。
sudo的-H标志有什么作用?
答案 0 :(得分:51)
man sudo
(具体文字可能会有所不同,但会有所不同):
-H
-H(HOME)选项请求安全策略将HOME环境变量设置为密码数据库指定的目标用户的主目录(默认为root)。根据策略,这可能是默认行为。
那为什么这是一个选择呢? 通常使用" sudo"不会更改$ HOME环境变量。
例如:
echo $HOME $USER
/home/testuser testuser
sudo bash -c 'echo $HOME $USER'
/home/testuser root
sudo -H bash -c 'echo $HOME $USER'
/home/root root
你可以看到普通的sudo改变了我来自哪个用户" testuser" to" root",而不是$ HOME设置的内容,而sudo -H也改变了" my"主目录到root的主目录。
pip警告你它是以root用户身份执行的,并希望修改$ HOME中的内容,该内容设置为' / Users / petertao&#39 ;,这不是root所有(很可能是" petertao"用户)。 警告表明pip使用$ HOME来缓存文件,但由于文件夹所有权不一致而禁用了自己的缓存。
当然,以root为基础执行时,可以修改' / Users / petertao / Library / Caches / pip'因为根(几乎)是全能的。 这可能会变得麻烦,因为没有root运行的程序不能再覆盖或修改这些文件。 相反,pip拒绝写入另一个用户拥有的目录。
答案 1 :(得分:-7)
-h标志通常表示人类可读的格式,它是Linux操作系统中内置的便捷转换。例如,如果您进入Linux的命令终端(在本例中为raspberry pi)并键入df。这将显示您已使用和可用的内存。它将显示类似您的448336字节的内容。您可能喜欢,令人困惑。现在,键入df -h(使用-h标志),您应该会得到类似448M而不是4488336字节的结果。