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

mar*_*er_ 106 python macos sudo pip

我已经开始使用我的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'
Run Code Online (Sandbox Code Playgroud)

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

Bur*_*lid 98

使用虚拟环境:

$ virtualenv myenv
.. some output ..
$ source myenv/bin/activate
(myenv) $ pip install what-i-want
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 我不明白为什么这是最好的答案。问题不在于虚拟环境。关于使用`sudo pip install`的有效性。假设我需要安装一些将在许多项目或系统级别使用的软件包。例如某些CLI工具,例如pgcli。显然,我不需要虚拟环境,我想在全球安装它。我应该使用sudo pip install还是其他一些正确的做法?就是那个问题。 (6认同)
  • 如果他的权限搞砸了他的**主目录**,使用virtualenv不太可能帮助他 (2认同)

Pio*_*ost 39

它是可接受的安全运行pip installsudo

它不安全而且不受欢迎 - 看看运行'sudo pip'有什么风险? 要在主目录中安装Python包,您不需要root权限.见描述--user选项点子.


thr*_*you 24

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

IOError: [Errno 13] Permission denied: '/Users/markwalker/Library/Logs/pip.log'
Run Code Online (Sandbox Code Playgroud)

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

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

pip install --user <packagename>
Run Code Online (Sandbox Code Playgroud)

它会工作得很好.

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

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

对于全局包的另一种方法,例如在您的情况下,您想要执行以下操作:

chown -R $USER /Library/Python/2.7/site-packages/
Run Code Online (Sandbox Code Playgroud)

或更一般地说

chown -R $USER <path to your global pip packages>
Run Code Online (Sandbox Code Playgroud)

  • -1更改全局*site-packages*文件夹的所有权是一件非常糟糕的事情.pip的`--user`选项在我的答案中作为解决方案给出,当你编写你的答案时已经存在. (9认同)
  • +1用于实际编写* entire *命令。有些人认为OP知道他们或其他读者可能不知道如何在命令行中实现* option *。您不同意吗,@ PiotrDobrogost? (2认同)
  • 更改系统的权限Python的整个`site-packages`目录类似于通过用扳手敲击来"固定"泵.这是有原因的保护 - 你不应该在那里安装东西*.*real*解决方案不是将系统Python发行版与日常编程混合在一起.安装不同的Python发行版(来自Python.org,Homebrew,Canopy等). (2认同)

Edg*_*gar 9

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

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

  • 你仍在使用`sudo pip`这个"解决方案",从而安装具有root权限的软件包,这可能不是你想要的? (7认同)
  • 你有没有机会解释为什么这会为你解决问题? (2认同)

hd1*_*hd1 5

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

  • 解决我不知道的问题是一种奖励!`chown` 在很多隐藏目录(如 `.shsh`)上给出了 `Operation not allowed`,我假设它正在处理它现在可以设置的文件,但我会看看当 cli 提示返回时会发生什么。 (2认同)

Mow*_*zer 5

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

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

pip install virtualenvwrapper
Run Code Online (Sandbox Code Playgroud)

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

sudo pip install virtualenvwrapper
Run Code Online (Sandbox Code Playgroud)

然后,我成功安装了它:

pip install --user virtualenvwrapper
Run Code Online (Sandbox Code Playgroud)