在Mac上以root身份运行pip时出现“权限被拒绝”

129 投票
6 回答
190612 浏览
提问于 2025-04-17 16:47

我开始在我的Mac上安装Python包,和在工作时用Windows电脑的方式一样;不过在Mac上,我经常遇到权限被拒绝的错误,特别是在写日志文件或安装包的时候。

所以我想到了用sudo pip install <package>来安装,但这样做安全么?因为我只是想在我当前的用户账户下安装这些包。

下面是一个日志文件输入输出错误的示例:

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

6 个回答

28

你最开始的问题是 pip 无法把日志写入文件夹。

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

你需要进入一个可以写入的文件夹,比如 /tmp,所以你可以先输入 cd /tmp,然后再执行命令,这样可能会成功,但这并不是你想要的。

但是实际上,对于这种情况(你不想用 sudo 来安装 Python 包),而且不需要全局安装包,你可以使用 --user 这个选项,像这样:

pip install --user <packagename>

这样就可以正常工作了。

我假设你是一个用户的 Python 安装,不想去研究 virtualenv(这个不太友好)或者 pipenv

正如评论区里有些人提到的,接下来的方法并不是一个好主意,除非你不知道该怎么做,卡住了:

另一种方法是 全局包,就像你想做的那样:

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

或者更一般地说:

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

在使用 sudo 的情况下运行 pip install 是可以接受和安全的吗?

其实这样做并不安全,而且很多人对此表示反对。你可以查看这个链接了解更多:使用 'sudo pip' 的风险是什么?。如果你想在自己的电脑上安装 Python 包,其实并不需要管理员权限。你可以参考这个链接了解 --user 选项的用法:描述

110

使用一个虚拟环境

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

只有在你想为全局的系统级Python安装东西时,才需要使用sudo或者提升权限。

最好使用虚拟环境,这样可以为你隔离软件包。这样你就可以随意尝试,而不会影响全局的Python安装。

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

撰写回答