我以usera
身份登录。我正在尝试使用sudo
从我的主目录运行脚本,并为pip
安装一些用于其他用户的软件包(即newuser
)。
在script.sh
我有以下内容:
sudo -u newuser pip3 install virtualenv
因此,我输入usera
的命令看起来像~/.usera: sudo script.sh
出于某种原因,这给了我以下错误:
PermissionError: [Errno 13] Permission denied: '/home/usera/.local'
The directory '/home/usera/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
它没有安装,至少不正确。有什么事我能做到吗?
答案 0 :(得分:1)
在脚本中,尝试
sudo -i -u newuser pip3 install virtualenv
-i
用于登录shell,因此主目录将是newuser's。
答案 1 :(得分:1)
让我们打印USER
和HOME
:
(venv) ➜ sudo -u new bash -c 'echo $USER'
new
(venv) ➜ sudo -u new bash -c 'echo $HOME'
/Users/old
sudo -u newuser
可以将您当前的用户更改为newuser
,但它不会更改您的HOME
文件夹,这意味着您正在运行pip3
命令{{1}在newuser
文件夹中。这就是你HOME
的原因。
所以你可以试试这个:
Permission denied
或使用sudo -H -u newuser bash -c 'pip3 install virtualenv'
-H, - set-home
请求安全策略将HOME环境变量设置为 目标用户的密码数据库指定的主目录 条目。根据策略,这可能是默认行为。
-i, - login
运行目标用户的密码数据库条目指定的shell 作为登录shell。这意味着登录特定的资源文件等 因为.profile或.login将由shell读取。如果命令是 指定,它通过shell的-c传递给shell执行 选项。如果未指定任何命令,则执行交互式shell。 sudo尝试在运行之前更改为该用户的主目录 贝壳。该命令使用类似于a的环境运行 用户将在登录时收到。命令环境部分在 sudoers(5)手动文档-i选项如何影响环境 在sudoers策略正在使用时运行命令。
查看sudo manpage的更多详情。
答案 2 :(得分:0)
你需要重新创建你的virtualenv。不要以root(sudo)用户身份创建虚拟环境。
请按照以下步骤操作
在文件夹中创建Virtualenv(不带sudo)virtualenv venv -p python3
激活Virtualenv