首页 文章

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

提问于
浏览
96

我在写入日志文件或站点包时遇到了频繁的权限被拒绝错误 .

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

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

6 回答

  • 39

    使用virtual environment

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

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

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

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

  • 9

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

    它被赞成了 - 请参阅What are the risks of running 'sudo pip'?要在主目录中安装Python软件包,您不需要root权限 . 请参见 --user 选项的description来点 .

  • 5

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

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

    你需要cd到一个文件夹,在这个文件夹中,调用的进程可以写成 /tmp ,所以 cd /tmp 并重新调用该命令可能会起作用但不是你想要的 .

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

    pip install --user <packagename>
    

    它会工作得很好 .

    我假设您有一个用户python python安装,并且不想打扰阅读virtualenv(这不是非常用户友好)或pipenv .

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

    另一种方法 for global packages 就像在你的情况下你想要做的事情:

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

    或更一般地说

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

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

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

  • 5

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

  • 96

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

    我这样做后,我的终端抱怨了:

    pip install virtualenvwrapper
    

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

    sudo pip install virtualenvwrapper
    

    然后,我 successfully 安装它:

    pip install --user virtualenvwrapper
    

相关问题