126

我已经开始使用我的 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除非绝对必要,否则应避免跑步。

4

6 回答 6

108

使用虚拟环境

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

sudo当你想为全局、系统范围的 Python 安装安装东西时,你只使用或提升权限。

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

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

于 2013-02-22T16:25:43.153 回答
48

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

它不安全,而且不受欢迎——请参阅运行 'sudo pip' 的风险是什么? 要在您的主目录中安装 Python 包,您不需要 root 权限。请参阅pip 选项的说明--user

于 2016-05-08T21:22:13.080 回答
28

您最初的问题是 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>
于 2016-07-10T23:19:31.543 回答
10

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

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

于 2013-10-14T16:40:36.940 回答
5

看起来你的权限被搞砸了。输入chown -R markwalker ~终端,然后再试pip一次?让我知道你是否排序。

于 2013-02-22T16:25:43.337 回答
5

virtualenvwrapper安装成功后出现问题virtualenv

执行此操作后,我的终端抱怨:

pip install virtualenvwrapper

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

sudo pip install virtualenvwrapper

然后,我成功地安装了它:

pip install --user virtualenvwrapper
于 2017-02-26T02:05:43.187 回答