这是一个linux问题,一直困扰着我。在我的工作linux框(运行RedHat)我试图安装一些Python包。然而,正在发生一些有趣的业务,见下文:
这是我的目标和第一个命令
pip install scrapylib
这会创建一个“拒绝权限”'错误
OSError: [Errno 13] Permission denied: '/usr/local/lib/python2.7/site-packages/scrapylib'
我的下意识反应是放弃" sudo"在完全相同的命令面前......
sudo pip install scrapylib
生成此异常,
sudo: pip: command not found
为了解决这个问题,我输入
sudo su - root
现在此命令成功运行
pip2.7 install scrapylib
最后,我改回来了
sudo su - uspowpow
任何人都可以向我解释这种现象吗?我是一名刚毕业的大学毕业生,除了基本的Linux知识外,如果有人能够解释为什么放置" sudo"在有效命令面前使其无效,我将非常感激(无论是修复还是知识)。
答案 0 :(得分:6)
出现这种情况有几个原因。选择一些:
sudo
强制执行的PATH中。对于/usr/local/bin
中的命令(您的pip
似乎是这样),这很可能。pip
别名pip2.7
?),或者可能是内置的shell(虽然情况并非如此) pip
)。默认情况下,sudo
使用execv *系列syscalls直接调用子进程,没有shell,因此(1)shell函数和别名不会被调用; (2)即使你 使用shell,该shell也不会运行你当前用户的dotfiles(作为非交互式shell,如果给出一个命令来运行,它将不会运行大多数 dotfiles)。要了解实际原因是什么,开始的地方是找出pip
是什么类型的命令。为此,请运行:
$ type pip
如果答案是:
pip is /usr/local/bin/pip
...然后,您应该查看secure_path
中设置的/etc/sudoers
值,以确保其中包含/usr/local/bin
,或者只运行sudo /usr/local/bin/pip
来回避问题。相比之下,如果你得到:
pip is aliased to `pip2.7'
...然后你知道问题是它是别名,你需要运行sudo pip2.7
(如果PATH不是也有问题)。