【问题标题】:OSX El Capitan: sudo pip install OSError: [Errno: 1] Operation not permittedOSX El Capitan: sudo pip install OSError: [Errno: 1] Operation not allowed
【发布时间】:2016-01-05 10:06:59
【问题描述】:

当我跑步时:

sudo pip install ipython

我收到以下错误

OSError: [Errno: 1] Operation not allowed: '/System/Library/Frameworks/Python.framework/Versions/2.7/share'

执行的最后一个命令尝试创建上面给出的目录。

此外,以下命令无法安装 iPython 且未提供任何错误。

sudo pip install --user python

(我在 Mac OS X El Capitan 上,以防该操作系统上的其他人看到同样的问题。)

【问题讨论】:

  • 我添加了一个答案,解释了如何修改您的 $PATH 以便您可以调用已安装 --user 包的可执行文件。 stackoverflow.com/a/47102398/117471
  • 您不应将sudo--user 一起使用。 --user 所做的是安装到 ~/Library 而不是 /Library 您不必使用 sudo 安装在那里。但是一旦使用sudo 安装,目录和文件都归root 所有。然后你必须使用sudo 对他们做任何其他事情。这反过来将要求您将sudo 用于您不应该使用它的其他事情。那么即使是一个诚实的错误也可能从引发错误到破坏数据。

标签: pip ipython failed-installation osx-elcapitan


【解决方案1】:

我通过 brew 安装了 python2.7,以下解决了我的问题

brew install numpy

它安装了 python3,但它仍然可以工作,并且也为 2.7 设置了它。

【讨论】:

  • 工作完美。谢谢!!
【解决方案2】:

我完全同意 Mikko,但如果你仍然想这样做,这里是方法:

  • 在恢复模式下重启(按住 cmd + R)
  • 从实用程序打开终端
  • 使用命令csrutil disable

【讨论】:

  • 如果不解释禁用系统完整性保护的含义,这可能是一个危险的建议。一个考虑因素是,如果您不以相对较快的速度重新启用它(就像 Windows UAC 和虚拟化一样),它将永远无法再次正常工作。
【解决方案3】:

你应该重新安装 Python:

brew reinstall python

要获取 brew,请参阅 brew homepage

【讨论】:

  • 我第二个。我运行brew install python 然后我认为pip 已经到位。之后 pip 安装工作(我在安装时遇到了类似的权限和 pip 保释问题)
【解决方案4】:

我猜你和其他包有冲突。对我来说是six。所以你需要使用这样的命令:

pip install google-api-python-client --upgrade --ignore-installed six

pip install --ignore-installed six

【讨论】:

  • @MikkoOhtamaa 给出的答案的哪一部分您不明白您仍然建议将 sudopip 一起使用?
  • @PiotrDobrogost,你为什么在提问之前不好好阅读。我的回答是关于six
  • 再次,@MikkoOhtamaa 给出的答案的哪一部分您不明白您仍然建议将 sudopip 一起使用?
【解决方案5】:

同样的错误

Installing collected packages: six, pyparsing, packaging, appdirs, setuptools
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 345, in move_wheel_files
    clobber(source, lib_dir, True)
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/wheel.py", line 323, in clobber
    shutil.copyfile(srcfile, destfile)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 83, in copyfile
    with open(dst, 'wb') as fdst:
IOError: [Errno 13] Permission denied: '/Library/Python/2.7/site-packages/six.py'

这里我使用--user 而不使用sudo 来解决这个问题

$ pip install --user scikit-image h5py keras pygame
Collecting scikit-image
  Downloading http://mirrors.aliyun.com/pypi/packages/65/69/27a1d55ce8f77c8ac757938707105b1070ff4f2ae47d2dc99461bfae4491/scikit_image-0.13.0-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (28.1MB)
    100% |████████████████████████████████| 28.1MB 380kB/s
Collecting h5py
  Downloading http://mirrors.aliyun.com/pypi/packages/b7/cc/1c29b0815b12de2c92b5323cad60f724ac8f0e39d0166d0b9dfacbcb70dd/h5py-2.7.0-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (4.5MB)
    100% |████████████████████████████████| 4.5MB 503kB/s
Requirement already satisfied: keras in /Library/Python/2.7/site-packages
Requirement already satisfied: pygame in /Library/Python/2.7/site-packages
Requirement already satisfied: matplotlib>=1.3.1 in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python (from scikit-image)
Requirement already satisfied: six>=1.7.3 in /Library/Python/2.7/site-packages (from scikit-image)
Requirement already satisfied: pillow>=2.1.0 in /Library/Python/2.7/site-packages (from scikit-image)
Requirement already satisfied: networkx>=1.8 in /Library/Python/2.7/site-packages (from scikit-image)
Requirement already satisfied: PyWavelets>=0.4.0 in /Library/Python/2.7/site-packages (from scikit-image)
Collecting scipy>=0.17.0 (from scikit-image)
  Downloading http://mirrors.aliyun.com/pypi/packages/72/eb/d398b9f63ee936575edc62520477d6c2353ed013bacd656bd0c8bc1d0fa7/scipy-0.19.0-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (16.2MB)
    100% |████████████████████████████████| 16.2MB 990kB/s
Requirement already satisfied: numpy>=1.7 in /Library/Python/2.7/site-packages (from h5py)
Requirement already satisfied: theano in /Library/Python/2.7/site-packages (from keras)
Requirement already satisfied: pyyaml in /Library/Python/2.7/site-packages (from keras)
Requirement already satisfied: python-dateutil in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python (from matplotlib>=1.3.1->scikit-image)
Requirement already satisfied: tornado in /Library/Python/2.7/site-packages (from matplotlib>=1.3.1->scikit-image)
Requirement already satisfied: pyparsing>=1.5.6 in /Users/qiuwei/Library/Python/2.7/lib/python/site-packages (from matplotlib>=1.3.1->scikit-image)
Requirement already satisfied: nose in /Library/Python/2.7/site-packages (from matplotlib>=1.3.1->scikit-image)
Requirement already satisfied: olefile in /Library/Python/2.7/site-packages (from pillow>=2.1.0->scikit-image)
Requirement already satisfied: decorator>=3.4.0 in /Library/Python/2.7/site-packages (from networkx>=1.8->scikit-image)
Requirement already satisfied: singledispatch in /Library/Python/2.7/site-packages (from tornado->matplotlib>=1.3.1->scikit-image)
Requirement already satisfied: certifi in /Library/Python/2.7/site-packages (from tornado->matplotlib>=1.3.1->scikit-image)
Requirement already satisfied: backports_abc>=0.4 in /Library/Python/2.7/site-packages (from tornado->matplotlib>=1.3.1->scikit-image)
Installing collected packages: scipy, scikit-image, h5py
Successfully installed h5py-2.7.0 scikit-image-0.13.0 scipy-0.19.0 

希望对遇到类似问题的人有所帮助!

【讨论】:

  • 您不应将sudo--user 一起使用。 --user 所做的是安装到 ~/Library 而不是 /Library 您不必使用 sudo 来安装那里。但是一旦使用sudo 安装,目录和文件都归root 所有。然后你必须使用sudo 对他们做任何其他事情。这反过来将要求您将sudo 用于您不应该使用它的其他事情。那么即使是一个诚实的错误也可能从引发错误到破坏数据。
【解决方案6】:

TL;DR $PATH 修复

  1. 使用pip install --user package_name 安装应包含CLI 可执行文件的包。
  2. 启动 python shell 和import package_name
  3. 查找lib/python/... 在输出中出现的位置,并将其全部替换为bin
  4. 很可能是$HOME/Library/Python/2.7/bin

详情

由于 macOS 10.11 El Capitan 中新的系统完整性保护,您不能再sudo pip install。我们不会在这里讨论它的优点。

另一个答案解释说你应该pip install --user 这是正确的。但是他们把你送到了后巷,想知道如何处理你的$PATH,这样你就可以访问已安装的可执行文件。幸运的是,我已经解决了一个similar need for an unrelated question

这是我如何解决我的一个系统上的问题的记录。我将所有内容都包括在内,而不仅仅是对我有用的$PATH,因为您的系统可能与我的不同。这个过程应该适用于所有人。

$ pip install --user jp
Collecting jp
  Downloading jp-0.2.4.tar.gz
Installing collected packages: jp
  Running setup.py install for jp ... done
Successfully installed jp-0.2.4

$ python -c 'import jp; print jp'
<module 'jp' from '/Users/bbronosky/Library/Python/2.7/lib/python/site-packages/jp/__init__.pyc'>

$ find /Users/bbronosky/Library/Python -type f -perm -100
/Users/bbronosky/Library/Python/2.7/bin/jp

$ which jp

$ echo -e '\n''export PATH=$HOME/Library/Python/2.7/bin:$PATH' >> ~/.bashrc

$ bash # starting a new bash process for demo, but you should open a new terminal

$ which jp
/Users/bbronosky/Library/Python/2.7/bin/jp

$ jp
usage: jp <expression> <filepath>

【讨论】:

    【解决方案7】:

    我遇到了同样的问题,但使用 easy_install "module" 为我解决了问题。

    我不知道为什么,但是 pip 和 easy_install 使用不同的安装位置,而 easy_install 选择了正确的位置。

    编辑:没有重新检查但是因为 cmets;似乎不同的(OSX 和 brew-installed)安装相互干扰,这就是为什么它们提到的工具确实指向不同的位置(因为它们属于不同的安装)。我知道通常这些工具从一个安装指向同一个文件夹。

    【讨论】:

    • 您是否安装了两个不同的 Python 解释器并为另一个配置了 easy_install
    • 我确实安装了 2-3 个不同的 python 版本,但我都有easy_install 用于所有这些版本:easy_install-2.6easy_install-2.7easy_install-3.5
    • 很可能pipeasy_install 指向不同的Python。您可以使用which UNIX 命令找出这一点,然后找出正确的pip 使用命令。
    • 升级前可能先从旧 OSX 安装?
    • pip 和 easy_install 使用不同的安装位置 – 不,它们使用完全相同的位置。当@MikkoOhtamaa 试图在他的 cmets 中向您展示时,它起作用了。这显然是没有答案的。
    【解决方案8】:

    告诉sudo pip install 的指令本质上是错误的。

    如果有任何教程说你应该做sudo pip,那么请针对这个包提交一个错误。作者在贬低 Python 社区,因为时间证明sudo pip 是一种错误做法。

    OSX El Capitan introduced a mechanisms to prevent damaging the operating system files/System/Library/Frameworks/Python.framework/Versions/2.7/share 是受保护的位置之一。 普通用户没有理由在其中放置或写入任何文件。这是因为操作系统本身依赖于这些文件,而sudo pip 会在上面给出的所有力量下无条件地覆盖它们。通常不好的事情不会发生,但机会是存在的。 Apple 希望保护他们的操作系统用户不会意外地阻止他们的安装。

    相反,您需要在本地安装一个 Python 包,例如 IPython,到您用户的主文件夹。最简单的方法是创建一个虚拟环境激活它,然后在虚拟环境中运行pip

    例子:

    cd ~  # Go to home directory
    virtualenv my-venv
    source my-venv/bin/activate
    pip install IPython
    

    更多信息

    或者,一个人应该能够做到pip install --user。但同样,不需要 sudo,您需要手动设置 PATH 环境变量。

    【讨论】:

    • 如果不需要 virtualenv 并且您想要全局(例如 /Library/Python/2.7/site-packages)安装模块,请使用easy_install stackoverflow.com/a/33463702/3078330 尝试我的解决方案
    • 您是否引用过这种关于“sudo pip”不好的观点(“随着时间的推移,sudo pip 是一种错误的做法”)?我在您给出的引用中没有看到任何关于 sudo 的讨论,并且本教程列出了创建 virtualenvs 为“pip install virtualenv”的第一步,这似乎创建了一个循环依赖项,试图遵循您的建议。
    • @Von: pip install virtualenv 对于 Python 3.4+ 应该不再需要,因为它们带有内置的 python -m venv virtualenv 等效项。 docs.python.org/3/library/venv.html
    • 恕我直言,这并没有解决最初的问题。我正在尝试安装 IPython 并使其在全球范围内可用(对于我机器上的所有用户),而 virtualenv 和 pip install --user IPython 都没有帮助。此外,pip install --user IPython 无法将ipython 命令放入$PATH(至少在我的机器上)。
    • 你教会了我,也节省了我的时间。非常感谢我停止使用 sudo 并且一切正常!很好的答案。
    【解决方案9】:

    pip install --ignore-installed six

    这将完成这项工作,然后您可以尝试您的第一个命令。

    通过http://github.com/pypa/pip/issues/3165

    【讨论】:

    • 就我而言,我还必须这样做pip install --ignore-installed setuptools
    • 不,由于缺少权限,这将无法完成工作。
    【解决方案10】:

    pip 很难在 El Capitan 上工作,原因如下:

    1. OS X 没有正确设置一些 distutils 变量,所以 pip 尝试在/System/Library/ 下的位置安装辅助文件。 El Capitan 阻止了这一点,这是您遇到的错误。
    2. OS X 在/System/Library/ 下包含许多过时的软件包。 pip 经常想升级这些,但不能在 El Capitan 上。
    3. OS X 在 python 搜索顺序中将/System/Library/ 置于比/Library/Python/2.7/site-packages 更高的位置(系统范围的python 包位置),因此即使您设法安装了某些包的较新版本,旧的仍然会被加载,破坏一些依赖项。

    https://apple.stackexchange.com/a/223163/143849 提供了所有这些解决方法。但您最好通过标准 Python 安装程序、Homebrew 或 Anaconda 安装您自己的 Python 版本。

    【讨论】:

      【解决方案11】:

      我也有同样的问题。 正如其他人所提到的,不要使用 sudo 运行 pip install。 运行

      brew doctor 
      

      并修复警告,您应该能够继续进行 pip 安装。

      【讨论】:

        【解决方案12】:

        改用pip3 install &lt;package&gt;,解决了pip的权限问题。

        【讨论】:

        • 仅供参考,这是因为 pip3 使用 Python 3,它通常由用户安装。另一方面,Python 2 (2.7) 是随 macOS 一起提供的,并且正如评分最高的答案所解释的那样受到保护。
        猜你喜欢
        • 2022-06-23
        • 1970-01-01
        • 2014-07-18
        • 2017-12-23
        • 2017-01-28
        • 2018-05-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多