2013-02-22 116 views
76

我已经开始使用我的Mac来安装Python软件包,就像我在使用Windows PC时一样;但是在我的Mac上,我在写入日志文件或站点包时遇到了频繁的权限被拒绝错误。在sudo下运行pip install可以接受吗?

因此,我考虑在sudo下运行pip install <package>,但是考虑到我只是希望将它安装在我当前的用户帐户下,是否安全/可以接受的使用sudo?从日志文件我

例追踪/ 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' 

更新 我能够安装,如果我用sudo pip install

+11

我发现'cd/tmp; sudo pip install foo''是一个适当的解决方法。 – 2013-02-22 16:28:09

回答

8

因为我有同样的问题,我想强调的是实际Brian Cain第一个注释是解决了“IO错误:[错误13]” - 问题:

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

+2

你有任何机会可以解释为什么这样可以解决你的问题吗? – Chris 2015-05-28 09:11:40

+7

你仍然在使用'sudo pip'这个解决方案“,并因此安装具有root权限的软件包,这可能不是你想要的吗? – Chris 2015-05-28 09:14:13

+0

我只能猜出为什么会这样:我认为某些(某些)pip安装脚本的一部分需要对当前目录的写入权限,但是对于不同的用户。因此,如果在你的主目录下执行,它会因为缺少写入权限而神秘地失败,如果从'/ tmp'中调用它就行了,因为每个人都有写权限 – Edgar 2015-07-03 13:36:19

75

使用virtual environment

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

你当你想要安装st时,只能使用sudo或提升权限用于全局系统范围的Python安装。

最好使用虚拟环境,为您隔离软件包。这样你可以在不污染全局Python安装的情况下玩耍。

作为奖励,virtualenv不需要提升权限。

+1

如果他的权限被搞乱了,他的**主目录**,使用virtualenv不可能帮助他 – hd1 2013-02-22 16:30:02

+1

是的,它会的,但它已经发生了,所以他需要在继续之前修复它。 – hd1 2013-02-22 16:33:01

+0

感谢球员们,在阅读关于virtualenv之前,希望这两个解决方案能够让我回到正轨:) – 2013-02-22 16:40:49

5

它看起来像你的权限搞砸了。在终端输入chown -R markwalker ~并再次尝试pip?让我知道你是否被排序。

+0

虽然这可能会解决权限问题,但它不回答问题。 – 2013-02-22 16:32:39

+1

解决问题我不知道我有奖金! 'chown'给''不允许的操作'给很多隐藏的dirs,比如'.shsh',我假设它正在处理它现在可以设置的文件,但是我会看到cli提示符返回时会发生什么。 – 2013-02-22 16:40:04

+0

该命令没有修复它:( – 2013-02-24 17:23:44

15

您原来的问题是,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> 
+7

-1更改全球*网站包*文件夹的所有权是一件可怕的事情。用于pip的'--user'选项是作为我的答案给出的解决方案,在您编写您的答案时已经存在。 – 2016-12-21 10:41:15

+1

我在这里看不到一个参数。此外,考虑到有人提出这样的入门级问题,可能不熟悉unix的权限系统,因此运行1用户安装并不重要。另外你的答案实际上无法解决我实际上正在使用WANTING来安装到全局软件包的用例。这样做后,我可以轻松地将权限恢复到预安装。 – 2016-12-23 08:00:29

+1

+1用于实际编写*整个*命令。有些人认为OP知道如何在命令行实现*选项*,否则他们或其他读者可能不会。你不同意吗,@PiotrDobrogost? – Mowzer 2017-02-25 23:34:35

4

我有一个问题研究所在成功安装virtualenv后分配virtualenvwrapper

pip install virtualenvwrapper 

所以,我没有成功尝试这样做(不推荐):我这样做后

我的终端抱怨

sudo pip install virtualenvwrapper 

然后,我成功安装它这个:

​​
+0

pip的--user选项作为我的答案中的解决方案给出,在您编写自己的答案时已经存在。这应该是一个评论,而不是一个答案。 – 2017-08-08 08:29:10