在sudo下运行pip install是否可以接受并且安全?


114

我已经开始使用Mac来安装Python软件包,就像在工作中使用Windows PC一样。但是,在Mac上,我在写入日志文件或站点程序包时经常遇到权限被拒绝的错误。

因此,我考虑过pip install <package>sudosudo 下运行,但是考虑到我只是想将其安装在当前用户帐户下,是否安全/可接受地使用sudo?

日志文件I / O错误的示例回溯:

Command /usr/bin/python -c "import setuptools;__file__='/Users/markwalker/build/pycrypto/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --single-version-externally-managed --record /var/folders/tq/hy1fz_4j27v6rstzzw4vymnr0000gp/T/pip-k6f2FU-record/install-record.txt failed with error code 1 in /Users/markwalker/build/pycrypto
Storing complete log in /Users/markwalker/Library/Logs/pip.log
Traceback (most recent call last):
  File "/usr/local/bin/pip", line 8, in <module>
    load_entry_point('pip==1.1', 'console_scripts', 'pip')()
  File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/__init__.py", line 116, in main
    return command.main(args[1:], options)
  File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/basecommand.py", line 141, in main
    log_fp = open_logfile(log_fn, 'w')
  File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/basecommand.py", line 168, in open_logfile
    log_fp = open(filename, mode)
IOError: [Errno 13] Permission denied: '/Users/markwalker/Library/Logs/pip.log'

更新 这可能取决于权限,但是最好的方法是为您的python项目使用虚拟环境。sudo pip除非绝对必要,否则应避免运行。


12
我发现' cd /tmp; sudo pip install foo'是一个适当的解决方法。
Brian Cain


@pradyunsg为什么标记这样一个老问题?
markwalker_

3
从本质上讲,当前接受的答案(并在问题中进行了更新)建议运行“ sudo pip”-pip的维护者(我自己是其中之一)正在积极地告诉人们不要这样做,因为这可能会导致操作系统崩溃。在MacOS和许多(所有?)主要的Linux发行版上。我登陆这里时使用的术语是某人可以调试他们的情况,并且只是想让人们重定向到一个有更好建议的位置。没想到实际上提出了这个问题,并且答案与上面的陈述相符。(字符除外)
pradyunsg

@markwalker_是否愿意从问题中删除该建议,并可能将其替换为更好的建议(使用--user或virtualenv)?
pradyunsg '18年

Answers:


105

使用虚拟环境

$ virtualenv myenv
.. some output ..
$ source myenv/bin/activate
(myenv) $ pip install what-i-want

sudo当您要为全局的系统级Python安装安装内容时,才使用或提升权限。

最好使用虚拟环境为您隔离软件包。这样一来,您就可以畅玩而不会污染全局python安装。

另外,virtualenv不需要提升的权限。


2
如果他的主目录的权限被弄乱了,那么使用virtualenv不太可能对他有帮助
hd1 2013年

1
是的,它会,但是已经发生了,因此他需要先解决它,然后再继续。
hd1

1
谢谢大家,我之前已经读过有关virtualenv的内容,因此希望这两个解决方案可以使我重回正轨:)
markwalker_

1
另外,要安装virtualenv,您需要sudo ...还是有解决方法?
jimijazz

8
我不明白为什么这是最好的答案。问题不在于虚拟环境。关于使用的有效性sudo pip install。假设我需要安装一些要在许多项目或系统级别使用的软件包。例如某些CLI工具pgcli。显然,我不需要虚拟环境,我想在全球安装它。我应该使用sudo pip install还是有一些更正确的做法?就是那个问题。
Alex Belyaev

42

它是可接受的安全运行pip installsudo

它不安全并且被皱着眉头–请参阅运行“ sudo pip”有什么风险? 要在主目录中安装Python软件包,您不需要root特权。见描述--user选项点子。


尽管您的解决方案是第一个实际起作用的解决方案,但@throws_exceptions_at_you使用实际代码创建了响应,而不是重定向至文档
Edenshaw

sudo pip install不知道使用它的损害。如何撤消该命令或阻止其运行sudo
EmreDeğirmenci

26

您最初的问题是pip无法将日志写入文件夹。

IOError: [Errno 13] Permission denied: '/Users/markwalker/Library/Logs/pip.log'

您需要将cd放入一个文件夹,在该文件夹中,调用的进程可以像/tmp这样写,cd /tmp然后重新调用该命令可能会起作用,但这不是您想要的。

实际上对于这种特殊情况(您不希望sudo用于安装python软件包)并且不需要全局软件包安装,可以使用如下--user标记:

pip install --user <packagename>

它会很好地工作。

我假设您具有一个用户python python安装,并且不想打扰有关virtualenv(不是很用户友好)或pipenv的阅读

正如评论部分中的某些人指出的那样,除非您不知道该怎么办并陷入困境,否则下一个方法不是一个好主意:

针对全局包的另一种方法例如您要执行的操作:

chown -R $USER /Library/Python/2.7/site-packages/

或更一般地

chown -R $USER <path to your global pip packages>

9
-1更改全局site-packages文件夹的所有权是一件很糟糕的事情。该--user用于画中画选项被给出当你写你的哪些已经存在于我的答案的解决方案。
Piotr Dobrogost '16

1
我在这里看不到任何争论。同样考虑到有人问这样的入门级问题可能并不熟悉unix的权限系统,因此运行1用户安装并不重要。另外,您的答案实际上无法解决我想要安装到全局软件包的用例。完成之后,我可以轻松地将权限恢复为预安装。
throws_exceptions_at_you

2
+1用于实际编写整个命令。有些人认为OP知道他们或其他读者可能不知道如何在命令行中实现选项。您不同意吗,@ PiotrDobrogost?
让我审视一下它

添加--user可以帮助我!
张洪浩

2
更改系统整个Python的site-packages目录的权限类似于通过用扳手重击来“修复”泵。它受到保护是有原因的-您不应该在那儿安装东西。在真正的解决方案是不混合使用一天到一天的编程系统Python发布。安装其他Python发行版(来自Python.org,Homebrew,Canopy等)。
charlesreid1年

9

因为我遇到了同样的问题,所以我想强调一下,布莱恩·凯恩的第一条评论实际上是“ IOError:[Errno 13]”问题的解决方案:

如果在temp目录(cd /tmp)中执行,那么如果我运行IOError就不会再发生sudo pip install foo


2
您是否有机会解释为什么这可以为您解决问题?
克里斯

8
您仍在使用sudo pip此“解决方案”,从而以root权限安装软件包,这可能不是您想要的?
克里斯

我只能猜测为什么会起作用:我认为(某些)pip安装脚本的某些部分需要对当前目录具有写访问权限,但使用的用户不同。因此,如果在主目录中执行该命令,则由于缺少写访问权限,它神秘地失败。如果从内部调用,/tmp它会起作用,因为每个人都可以在那里进行写访问。
Edgar

他没有对'/Users/markwalker/Library/Logs/pip.log'的写权限
-throws_exceptions_at_you

5

virtualenvwrapper成功安装后,我在安装时遇到问题virtualenv

执行此操作后,我的终端抱怨:

pip install virtualenvwrapper

因此,我尝试失败(不推荐)

sudo pip install virtualenvwrapper

然后,我成功安装了它:

pip install --user virtualenvwrapper

pip的--user选项是我回答中给出的解决方案,当您编写您的答案时就已经存在。这本来应该是评论,而不是答案。
Piotr Dobrogost '17

您说不推荐,但官方安装说明说好的可以使用sudo安装virtualenvwrapper。virtualenv也是如此。这里提出的问题没有提到这两个问题,因此我认为这里所有其他答案都是针对通用python软件包的。
mehmet

对于以后的读者,由于上述评论,我在回答中打了我的“不推荐”标志,但我尚未对其进行验证。这就是为什么我还没有删除标志的原因。
让我思考一下

4

看来您的权限搞砸了。键入chown -R markwalker ~在终端和尝试pip一次?让我知道您是否已排序。


尽管这可以解决权限问题,但不能回答问题。
Burhan Khalid

1
解决我不知道遇到的问题是加分项!chown提供Operation not permitted了很多类似的隐藏目录.shsh,我认为它正在处理它现在可以设置的文件,但是我将看到cli提示返回时会发生什么。
markwalker_
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.