linux 命令找到但在使用 sudo 时未找到

pet*_*tey 11 linux bash centos sudo

我正在尝试像这样运行 python3 安装:

pip3 install django
Run Code Online (Sandbox Code Playgroud)

我收到错误:

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

然后我尝试:

sudo pip3 install django
Run Code Online (Sandbox Code Playgroud)

我收到错误:

须藤:pip3:找不到命令

这是我的 $PATH 的样子:

/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2-user/bin
Run Code Online (Sandbox Code Playgroud)

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

Evi*_*lan 9

PATH出于安全原因,Sudo 与您当前的用户不同。其中/etc/sudoers有一个选项secure_path指定使用 sudo 运行命令时使用的路径。我的看起来像这样:

Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
Run Code Online (Sandbox Code Playgroud)

从 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.
Run Code Online (Sandbox Code Playgroud)

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

sudo /path/to/pip3 install django
Run Code Online (Sandbox Code Playgroud)


pet*_*tey 0

我这样发布 django 安装:

pip3 install --user django
Run Code Online (Sandbox Code Playgroud)

这解决了问题。