我想在我的 debian jessie 服务器上安装一个系统范围的 virtualenv,每个用户都可以使用,而不需要 sudo(无论如何它应该工作的方式)或特定于用户的安装。
这是我从头开始输入的内容:
$ sudo apt-get install python3
#Install OK
$ sudo apt-get install python3-pip
#Install OK
$ pip3 install virtualenv
#Fails with "error: could not create '/usr/local/lib': Permission denied"
$ sudo pip3 install virtualenv
#Install OK, but it appears that '/usr/local/bin' now has 'drwxr-s---'
#permissions instead of 'drwxrwsr-x' (users can't list files in the directory...)
$ virtualenv env1
#Fails with "Command not found" (virtualenv is in '/usr/local/bin')
$ sudo virtualenv env1
#OK, but that's not the way it should work
我可以让它与用户特定的安装(pip3 install --user virtualenv)和“~/.bashrc”中的一些 $PATH 初始化一起工作,但每个用户都有 pip 费力必须安装和重新配置 virtualenv。
我确定我遗漏了什么,但是当我运行安装 virtualenv 的命令时,pip3 似乎没有正确设置它在“/usr/local”中创建的文件和文件夹的权限。
请您参考如下方法:
解决了。
问题是我的“/etc/logins.def”文件,我在其中将所有用户(包括根用户)的默认 UMASK 设置为 007(非所有者或非所有者对新文件或文件夹没有读/写/执行权限非团体成员)。因此 sudo pip3 install virtualenv 行在“/usr/local”中创建文件夹和可执行文件,权限过于严格。
为了克服这个问题,我在“/root/.bashrc”中更改了根目录的 umask(以防有人使用 sudo su 来安装包),并在“/etc”中添加了以下行/sudoers' 通过 visudo:
#UMASK is not unioned with the one set in the PAM module
Defaults umask_override
#Default UMASK is 007 for non-root users (for some reason I can't use 'Defaults>!root')
Defaults umask=0007
#Root UMASK is 022, to overcome permission problems when installing packages
Defaults>root umask=0022
现在我可以在重复这些步骤后执行 virtualenv:
$ sudo apt-get install python3
#Install OK
$ sudo apt-get install python3-pip
#Install OK
$ sudo pip3 install virtualenv
#Install OK
$ virtualenv env1
#OK
