Skip to main content
 首页 » 编程设计

python之没有 sudo 或用户特定的安装和重新配置就不能使用 virtualenv

2025年05月04日9mfryf

我想在我的 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