我如何修复 Pip 的权限错误?
- 2025-01-09 08:46:00
- admin 原创
- 119
问题描述:
当我尝试在家里的 Mac 上安装 Python 包时,我经常在尝试写入日志文件或目录时收到权限错误site-packages
,如下所示:
Command /usr/bin/python -c "import setuptools;__file__='/Users/markwalker/build/pycrypto/setup.py';exec(compile(open(__file__).read().replace('
', '
'), __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
?
解决方案 1:
使用虚拟环境:
$ virtualenv myenv
.. some output ..
$ source myenv/bin/activate
(myenv) $ pip install what-i-want
sudo
仅当您想要为全局、系统范围的 Python 安装安装内容时才使用或提升权限。
最好使用虚拟环境来隔离软件包。这样,您就可以随意操作而不会污染全局 python 安装。
另外,virtualenv 不需要提升权限。
解决方案 2:
使用sudo
Pip并不安全,因此不鼓励使用。
要在主目录中安装 Python 包,您不需要 root 权限。相反,请使用 Pip 的--user
选项。
解决方案 3:
你原来的问题是 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>
解决方案 4:
因为我遇到了同样的问题,所以我想强调一下,实际上Brian Cain的第一条评论是“IOError:[Errno 13]”问题的解决方案:
如果在临时目录中执行(cd /tmp
),则运行时不会再发生 IOError sudo pip install foo
。
解决方案 5:
virtualenvwrapper
成功安装后,我遇到了安装问题virtualenv
。
我这样做之后,我的终端抱怨道:
pip install virtualenvwrapper
因此,我尝试了这个方法但没有成功(不推荐):
sudo pip install virtualenvwrapper
然后,我使用以下命令成功安装了它:
pip install --user virtualenvwrapper
解决方案 6:
您的权限似乎有问题。chown -R markwalker ~
在终端中输入内容,然后重试pip
?如果您解决了问题,请告诉我。