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

时间:2013-02-22 16:21:22

标签: python macos pip sudo

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

因此,我考虑在pip install <package>下运行sudo,但考虑到我只是希望将其安装在我当前的用户帐户下,这是一个安全/可接受的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

6 个答案:

答案 0 :(得分:97)

使用virtual environment

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

如果要为全局系统范围的Python安装安装内容,则只能使用sudo或提升的权限。

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

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

答案 1 :(得分:39)

  

是否可接受&amp;在pip install下可以安全地运行sudo吗?

不安全而且不满意 - 请参阅What are the risks of running 'sudo pip'? 要在主目录中安装Python包,您不需要root权限。请参阅--user选项的description来点击。

答案 2 :(得分:24)

你原来的问题是pip无法将日志写入文件夹。

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

你需要进入一个文件夹,调用的进程可以像/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>

答案 3 :(得分:9)

因为我遇到了同样的问题,我想强调的是,Brian Cain的第一个评论实际上是“IOError:[Errno 13]”的解决方案 - 问题:

如果在临时目录(cd /tmp)中执行,如果我运行sudo pip install foo,则不再发生IOError。

答案 4 :(得分:5)

看起来您的权限搞砸了。在终端中输入chown -R markwalker ~并再次尝试pip?如果您已经分类,请告诉我。

答案 5 :(得分:5)

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

我的终端在我这样做之后抱怨:

pip install virtualenvwrapper

所以,我没有成功尝试过这次(不推荐)

sudo pip install virtualenvwrapper

然后, 成功 安装了它:

pip install --user virtualenvwrapper