首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在我的Mac上以root身份运行pip时遇到“权限被拒绝”的问题

在我的Mac上以root身份运行pip时遇到“权限被拒绝”的问题
EN

Stack Overflow用户
提问于 2013-02-23 00:21:22
回答 5查看 169.4K关注 0票数 125

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

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

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

代码语言:javascript
复制
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 这很可能归结为权限问题,但是最好的方法是为您的python项目使用虚拟环境。除非绝对必要,否则应避免运行sudo pip

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-02-23 00:25:43

使用virtual environment

代码语言:javascript
复制
$ virtualenv myenv
.. some output ..
$ source myenv/bin/activate
(myenv) $ pip install what-i-want

只有当您想要为全局的、系统范围的Python安装安装内容时,才使用sudo或提升的权限。

最好使用虚拟环境来为您隔离包。这样,您就可以在不污染全局python安装的情况下运行。

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

票数 108
EN

Stack Overflow用户

发布于 2016-05-09 05:22:13

sudo下运行pip install是否可以接受和安全?

它不安全,而且不受欢迎-请参阅What are the risks of running 'sudo pip'?在您的主目录中安装Python包,您不需要根用户权限。请参见pip的description of --user选项。

票数 48
EN

Stack Overflow用户

发布于 2016-07-11 07:19:32

您的原始问题是pip无法将日志写入该文件夹。

代码语言:javascript
复制
IOError: [Errno 13] Permission denied: '/Users/markwalker/Library/Logs/pip.log'

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

但是实际上对于这种特殊的情况(你不想使用sudo来安装python包)并且不需要全局包安装,你可以像这样使用--user标志:

代码语言:javascript
复制
pip install --user <packagename>

而且它会工作得很好。

我假设您已经安装了一个用户的python python,并且不想费心阅读有关virtualenv (这对用户不是很友好)或pipenv的内容。

正如评论区中的一些人指出的那样,下一种方法不是一个很好的主意,除非你不知道该做什么并被卡住了:

全局包的另一种方法,在您的示例中,您希望执行以下操作:

代码语言:javascript
复制
chown -R $USER /Library/Python/2.7/site-packages/

或者更一般地说

代码语言:javascript
复制
chown -R $USER <path to your global pip packages>
票数 28
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15028648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档