pip Python 3的权限错误

codeDojo

我在Mac OS X上使用Python3。一切都很完美,我曾经安装过这样的软件包:

pip install somePackage

但是IDLE停止工作了,所以我不得不重新安装它。在那之后,当我运行pip时,pip is not defined我必须安装pip。现在,每次我尝试使用pip安装软件包时,都会出现此错误:

Exception:
Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/basecommand.py", line 215, in main
    status = self.run(options, args)
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/commands/install.py", line 342, in run
    prefix=options.prefix_path,
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/req/req_set.py", line 784, in install
    **kwargs
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/req/req_install.py", line 851, in install
    self.move_wheel_files(self.source_dir, root=root, prefix=prefix)
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/req/req_install.py", line 1064, in move_wheel_files
    isolated=self.isolated,
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/wheel.py", line 377, in move_wheel_files
    clobber(source, dest, False, fixer=fixer, filter=filter)
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/wheel.py", line 287, in clobber
    ensure_dir(dest)  # common for the 'include' path
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/utils/__init__.py", line 83, in ensure_dir
    os.makedirs(path)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/os.py", line 157, in makedirs
    mkdir(name, mode)
OSError: [Errno 1] Operation not permitted: '/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7/pygame'

我以为可能是从版本开始的,所以我更新了它。现在,每当我运行时,都会出现pip install something此错误:

命令“ / usr / bin / python -u -c”导入设置工具,标记化;文件='/ private / var / folders / bc / hwpn9sqn5352xcbst0p89snm0000gn / T / pip-build-hSNyxK / termcolor / setup.py'; f = getattr(tokenize,'open',open)(file); code = f.read ().replace('\ r \ n','\ n'); f.close(); exec(compile(code,file,'exec'))“安装--record / var / folders / bc / hwpn9sqn5352xcbst0p89snm0000gn /T/pip-U3ZtNq-record/install-record.txt-“单一版本-外部管理-编译”失败,错误代码为/ private / var / folders / bc / hwpn9sqn5352xcbst0p89snm0000gn / T / pip-build- hSNyxK / termcolor /

我什至无法删除软件包-运行时出现pip uninstall something此错误:

Exception:
Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/basecommand.py", line 215, in main
    status = self.run(options, args)
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/commands/uninstall.py", line 76, in run
    requirement_set.uninstall(auto_confirm=options.yes)
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/req/req_set.py", line 346, in uninstall
    req.uninstall(auto_confirm=auto_confirm)
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/req/req_install.py", line 754, in uninstall
    paths_to_remove.remove(auto_confirm)
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/req/req_uninstall.py", line 115, in remove
    renames(path, new_path)
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/utils/__init__.py", line 267, in renames
    shutil.move(old, new)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 302, in move
    copy2(src, real_dst)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 131, in copy2
    copystat(src, dst)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 103, in copystat
    os.chflags(dst, st.st_flags)
OSError: [Errno 1] Operation not permitted: '/var/folders/bc/hwpn9sqn5352xcbst0p89snm0000gn/T/pip-OQKY_a-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy-1.8.0rc1-py2.7.egg-info'

我的点子版本是:

pip 9.0.1 from /Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg (python 2.7)

我正在使用Mac 10.12.6

我怎样才能解决这个问题?

charlesreid1

您看到的权限错误是由于您的site-packages目录(尝试将pip安装到的目录)受管理员保护和拥有的。

网站包目录在哪里

这取决于您的Python发行版。这就是为什么我要您包括$ which python命令(从命令行)和>>> import site; site.getsitepackages()命令(从Python)的输出。这些将帮助您弄清楚站点包目录的位置。同样,运行pip -v将打印pip尝试安装到的目录。

请务必注意,Mac随附Python的系统版本。您不应该安装此系统版本的Python可访问的任何软件包,因为它已被系统使用,并且有可能干扰其正常运行和/或安装恶意版本的软件包,这些版本的恶意软件会在系统使用该Python时造成不良后果(例如,如果有人制作了一个讨厌的鸡蛋并将其命名为“ os”,并将其放在系统Python的site-packages目录中,则下一次系统python版本运行“ import os”时,它将导入讨厌的鸡蛋。)

为什么用覆盖sudo pip install不是一个好的解决方案

虽然pip install以sudo运行命令可能会解决问题,但这是一个短期修复,由于我在@Nenand的答案中的评论中提到的原因,这是非常糟糕的-运行pip install X从互联网下载X的鸡蛋,然后python setup.py build && python setup.py install在发生任何情况下运行setup.py尽管很容易沾沾自喜,因为,嘿,它起作用了!但是,在互联网上信任陌生人也很天真(让我们面对现实,制作pip包的人对您来说陌生人)。

编辑:我什至没有想到这一点,但也有可能您错误地键入了一个库,或猜测了错误的名称,并最终得到了一个您真的不想要的(打错字)。请参阅有关欺骗性pip软件包的BleepingComputer文章。

正确的解决方案

正确的解决方案是弄清楚为什么您的site-packages目录受到保护,并修复其权限或更改site-packagespip使用目录。

我怀疑您看到此权限错误的原因是pip试图安装到系统Python的site-packages目录,该目录归root所有,这是有充分理由的。系统Python位于,/usr/bin/site-packages目录位于以下目录:

'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages'
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/site-python'
'/Library/Python/2.7/site-packages'

在这种情况下,我的建议是使用Homebrew,Python.org或Canopy安装Python,这将使您的蛇保持在单独的笼子中,而将系统Python保留下来。在我的系统上,python是系统python,python2是Python版本2,python3也是Python版本3。这也使我更清楚使用的是哪个版本。我也没有pip命令-不在我的路径上-所以我不能不小心将某些东西安装到我的系统Python中。我必须明确致电pip2pip3使用Homebrew Python将为您完成所有这些工作,因此,这是许多可用Python发行版中我最喜欢的建议。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章