Pet*_*Tao 42 python terminal sudo pip virtualenv
尝试用pip安装virtualenv之后
$ pip install virtualenv
Run Code Online (Sandbox Code Playgroud)
我得到了一个允许拒绝错误
IOError: [Errno 13] Permission denied: '/Library/Python/2.7/site-packages/virtualenv.py'
Run Code Online (Sandbox Code Playgroud)
所以我用sudo来安装virtualenv
$ sudo pip install virtualenv
Run Code Online (Sandbox Code Playgroud)
但随后出现了警告:
目录'/ Users/petertao/Library/Caches/pip/http'或其父目录不归当前用户所有,并且已禁用缓存.请检查该目录的权限和所有者.如果用sudo执行pip,你可能需要sudo的-H标志.
目录'/ Users/petertao/Library/Caches/pip'或其父目录不归当前用户所有,并且已禁用缓存轮.检查该目录的权限和所有者.如果用sudo执行pip,你可能需要sudo的-H标志.
sudo的-H标志有什么作用?
use*_*593 69
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
Run Code Online (Sandbox Code Playgroud)
你可以看到普通的sudo改变了我从"testuser"到"root"的用户,而不是$ HOME设置的用户,而sudo -H也将变量从"my"主目录更改为root的主目录.
pip警告你它是以root用户身份执行的,并希望修改$ HOME中的内容,该内容设置为'/ Users/petertao',而不是root用户(很可能是"petertao"用户).警告表明pip使用$ HOME来缓存文件,但由于文件夹所有权差异而禁用了自己的缓存.
当然,作为root pip执行时可以修改'/ Users/petertao/Library/Caches/pip',因为root(几乎)是全能的.这可能会变得麻烦,因为没有root运行的程序不能再覆盖或修改这些文件.相反,pip拒绝写入另一个用户拥有的目录.
| 归档时间: |
|
| 查看次数: |
21654 次 |
| 最近记录: |