使用 sudo 时找不到 linux 命令

使用 sudo 时找不到 linux 命令

我正在尝试运行如下 python3 安装:

pip3 install django

我收到错误:

PermissionError:[Errno 13] 权限被拒绝:'/usr/local/lib/python3.6/site-packages/pytz'

然后我尝试:

sudo pip3 install django

我收到错误:

sudo:pip3:未找到命令

以下是我的 $PATH 的样子:

/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2-user/bin

我如何获得 pip3 的 sudo 访问权限?

答案1

出于安全原因,Sudo 不会使用PATH与当前用户相同的用户。有/etc/sudoers一个选项secure_path它指定使用 sudo 运行命令时使用的路径。我的路径如下:

Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

来自 sudo 手册页:

 secure_path   Path used for every command run from sudo.  If you don't trust the people running sudo to have a sane PATH environment
               variable you may want to use this.  Another use is if you want to have the “root path” be separate from the “user path”.
               Users in the group specified by the exempt_group option are not affected by secure_path.  This option is not set by
               default.

pip3命令可能不在文件定义的路径中sudoers。您可以将路径添加到secure_path或者提供命令的完整路径,pip3如下所示:

sudo /path/to/pip3 install django

答案2

sudo 可能不会在使用时保留您的 $PATH 变量。请尝试在命令中使用 pip3 二进制文件的完整路径,例如:sudo /path/to/pip3 install django。如果您不确定完整路径,请执行which pip3

答案3

你总是可以这样做:

sudo env "PATH=$PATH" pip3 install django

正如它提到的这个答案

答案4

我通过以下方式发布了 django 安装:

pip3 install --user django

这解决了问题。

相关内容