【问题标题】:"OSError: [Errno 1] Operation not permitted" when installing Scrapy in OSX 10.11 (El Capitan) (System Integrity Protection)在 OSX 10.11 (El Capitan) 中安装 Scrapy 时出现“OSError: [Errno 1] Operation not allowed”(系统完整性保护)
【发布时间】:2015-08-09 01:00:37
【问题描述】:

我正在尝试通过 pip 在 OSX 10.11 (El Capitan) 中安装 Scrapy Python 框架。安装脚本会下载所需的模块,并在某些时候返回以下错误:

OSError: [Errno 1] Operation not permitted: '/tmp/pip-nIfswi-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/six-1.4.1-py2.7.egg-info'

我尝试使用以下命令停用 OSX 10.11 中的无根功能:

sudo nvram boot-args="rootless=0";sudo reboot

但是当机器重新启动时我仍然得到同样的错误。

我的 StackExchangers 同事有什么线索或想法吗?

如果有帮助,完整的脚本输出如下:

sudo -s pip install scrapy
Collecting scrapy
  Downloading Scrapy-1.0.2-py2-none-any.whl (290kB)
    100% |████████████████████████████████| 290kB 345kB/s 
Requirement already satisfied (use --upgrade to upgrade): cssselect>=0.9 in /Library/Python/2.7/site-packages (from scrapy)
Requirement already satisfied (use --upgrade to upgrade): queuelib in /Library/Python/2.7/site-packages (from scrapy)
Requirement already satisfied (use --upgrade to upgrade): pyOpenSSL in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python (from scrapy)
Collecting w3lib>=1.8.0 (from scrapy)
  Downloading w3lib-1.12.0-py2.py3-none-any.whl
Collecting lxml (from scrapy)
  Downloading lxml-3.4.4.tar.gz (3.5MB)
    100% |████████████████████████████████| 3.5MB 112kB/s 
Collecting Twisted>=10.0.0 (from scrapy)
  Downloading Twisted-15.3.0.tar.bz2 (4.4MB)
    100% |████████████████████████████████| 4.4MB 94kB/s 
Collecting six>=1.5.2 (from scrapy)
  Downloading six-1.9.0-py2.py3-none-any.whl
Requirement already satisfied (use --upgrade to upgrade): zope.interface>=3.6.0 in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python (from Twisted>=10.0.0->scrapy)
Requirement already satisfied (use --upgrade to upgrade): setuptools in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python (from zope.interface>=3.6.0->Twisted>=10.0.0->scrapy)
Installing collected packages: six, w3lib, lxml, Twisted, scrapy
  Found existing installation: six 1.4.1
    DEPRECATION: Uninstalling a distutils installed project (six) has been deprecated and will be removed in a future version. This is due to the fact that uninstalling a distutils project will only partially uninstall the project.
    Uninstalling six-1.4.1:
Exception:
Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/pip-7.1.0-py2.7.egg/pip/basecommand.py", line 223, in main
status = self.run(options, args)
  File "/Library/Python/2.7/site-packages/pip-7.1.0-py2.7.egg/pip/commands/install.py", line 299, in run
root=options.root_path,
  File "/Library/Python/2.7/site-packages/pip-7.1.0-py2.7.egg/pip/req/req_set.py", line 640, in install
requirement.uninstall(auto_confirm=True)
  File "/Library/Python/2.7/site-packages/pip-7.1.0-py2.7.egg/pip/req/req_install.py", line 726, in uninstall
paths_to_remove.remove(auto_confirm)
  File "/Library/Python/2.7/site-packages/pip-7.1.0-py2.7.egg/pip/req/req_uninstall.py", line 125, in remove
renames(path, new_path)
  File "/Library/Python/2.7/site-packages/pip-7.1.0-py2.7.egg/pip/utils/__init__.py", line 314, 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: '/tmp/pip-nIfswi-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/six-1.4.1-py2.7.egg-info'

【问题讨论】:

标签: python macos python-2.7 scrapy


【解决方案1】:
pip install --ignore-installed six

会成功的。

来源:github.com/pypa/pip/issues/3165

【讨论】:

  • 在 El Capitan 上安装 awscli 时,这对我来说效果很好,不会弄乱 python 安装:sudo pip install --ignore-installed awscli
  • 使用此方法安装时无法导入scrapy ImportError: cannot import name xmlrpc_client
  • --ignore-installed 标志也为我解决了 AWS Elastic Beanstalk Cli 的问题。终于……
  • 这对我也很有效。我认为这应该是正确的答案。
  • 这对我有用 sudo pip install --ignore-installed scrapy。
【解决方案2】:

正如其他答案所说,这是因为新的系统完整性保护,但我认为其他答案过于复杂。

如果您只想在当前用户中使用该软件包,您应该能够通过使用--user 标志来安装它,而无需禁用 SIP。像这样:

sudo pip install --user packagename

【讨论】:

  • 我不清楚这些不同的标志是如何工作的,但这个答案对我来说似乎最有意义。 (另外,它有效:)
  • @xdhmoore 谢谢,我也这么认为哈哈。无需禁用 SIP 或安装新的 python 或弄乱依赖项。
  • 对于 mkvirtualenv,这并没有将软件包安装在预期的位置 /usr/local/bin。相反,sudo pip install mkvirtualenv --ignore-installed six 按预期工作,将 virtualenvwrapper.sh 放入 /usr/local/bin
  • @Rob 真的没有。 --user 标志只为当前用户安装,因此它不会安装在非用户特定的文件夹中是有道理的。对我来说,此命令将我的包安装在“/Users/myusername/Library/Python/2.7/lib/python/site-packag‌​es”中,用于 .py 文件和“/Users/myusername/Library/Python/2.7/bin”对于 .sh 文件
  • 这对我有用 rasa-nlu 。 sudo pip install --user rasa_nlu
【解决方案3】:

我也认为绝对没有必要开始破解 OS X。

我能解决它做一个

brew install python

看来使用new El Capitan自带的python/pip有点问题。

【讨论】:

  • 也为我工作,并为我提供了下一个 Python 2.7.X。这个答案应该会赢
  • 这是 El Capitan Mac 用户的最佳答案
  • 你说的对!这应该是被接受的答案!
  • 那是为我做的。 (塞拉利昂 10.13.6)
  • @codersofthedark 也许brew install python3 可以解决这个问题,因为在较新的系统上,python3 现在是默认的 python。
【解决方案4】:

高投票的答案对我不起作用,它似乎对 El Capitan 用户有用。但对于 MacOS Sierra 用户,请尝试以下步骤

  1. brew install python
  2. sudo pip install --user <package name>

【讨论】:

  • sudo pip install --user <package name> 为我工作,无需重新安装 python
【解决方案5】:

这对我有用。

sudo pip install --ignore-installed scrapy

【讨论】:

    【解决方案6】:

    我在我的 MacOS Sierra 上遇到了同样的错误。我按照这些步骤成功安装了 Scarpy 包。

    1. sudo pip install --ignore-installed six
    2. sudo pip install --ignore-installed scrapy
    
    MacBook-Air:~ shree$ scrapy version
    Scrapy 1.4.0
    

    【讨论】:

      【解决方案7】:

      尝试了一些答案的组合,最终奏效了:

      sudo -H pip install --upgrade --ignore-installed awsebcli

      干杯

      【讨论】:

        【解决方案8】:

        这对我有用:

           sudo pip install scrapy --ignore-installed six
        

        【讨论】:

        • 是的,这也适用于sudo pip install virtualenvwrapper --ignore-installed six,避免此错误:OSError: [Errno 1] Operation not permitted: '/tmp/..../System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/six-1.4.1-py2.7.egg-info'
        【解决方案9】:

        警告

        我建议非常强烈不要在 Mac 上修改系统 Python;可能会出现许多问题。

        您的特定错误表明安装程序在解决 Scrapy 的依赖项时存在问题,而不会影响当前的 Python 安装。该系统使用 Python 执行许多基本任务,因此保持系统安装稳定并保持 Apple 最初安装的状态非常重要。

        在绕过内置安全性之前,我还会用尽所有其他可能性。

        包管理器解决方案:

        请先查看virtualenv等Python虚拟化工具;这将使您能够安全地进行实验。

        在不与您的 Mac OS 冲突的情况下使用语言和软件的另一个有用工具是Homebrew。与 MacPorts 或 Fink 一样,Homebrew 是 Mac 的包管理器,可用于安全地尝试许多其他语言和工具。

        “自行开发”软件安装:

        如果您不喜欢包管理器方法,您可以使用/usr/local 路径或创建一个/opt/local 目录来安装备用Python 安装并在.bashrc 中修复您的路径。请注意,您必须为这些解决方案启用 root。

        怎么做:

        如果您绝对必须禁用安全检查(我真诚地希望它不是为了弄乱系统语言和资源),您可以暂时禁用它并使用一些重新启用它这篇文章中关于如何Disable System Integrity-Protection的技巧。

        【讨论】:

        • 这有点花费时间并且需要一定的命令行熟练度,但结果非常值得——我为 Ruby (RVM)、Perl 等使用类似的虚拟环境。 Homebrew 对安全地尝试许多其他语言和工具。
        【解决方案10】:

        我尝试在 El Capitan 中通过 pip 安装 AWS,但出现此错误

        OSError: [Errno 1] 不允许操作: '/var/folders/wm/jhnj0g_s16gb36y8kwvrgm7h0000gp/T/pip-wTnb_D-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/six-1.4.1-py2.7.egg-信息'

        我找到了答案here

        sudo -H pip install awscli --upgrade --ignore-installed six
        

        它对我有用:)

        【讨论】:

          【解决方案11】:

          如果您尝试使用 pip 而不是 pip3 在 python2 文件夹中安装 python3 库,有时可能会实现这种行为。

          【讨论】:

            【解决方案12】:

            这个命令可以正常工作 :D

            sudo -H pip install --upgrade package_name --ignore-installed 六

            【讨论】:

              【解决方案13】:

              它对我有用:

              pip install scrapy --user -U
              

              【讨论】:

                【解决方案14】:

                我在其他地方缺少依赖项,所以我安装了项目的其他要求,如下所示:

                pip install --user -r requirements.txt
                

                【讨论】:

                  【解决方案15】:

                  重新启动 Mac -> 在启动铃声后按住“Command + R” -> 打开 OS X 实用程序 -> 打开终端并键入“csrutil disable” -> 重新启动 OS X -> 打开终端并检查“csrutil status”

                  【讨论】:

                    【解决方案16】:

                    您应该禁用 El Capitan 中的新功能“系统完整性保护”。

                    首先,您应该在终端上运行无根配置命令

                    # nvram boot-args="rootless=0"
                    # reboot
                    

                    然后,您应该在恢复分区的终端(Recovery OS)上运行以下命令

                    # csrutil disable
                    # reboot
                    

                    我刚刚解决了我的问题。 我不确定第一部分是否必要。随心所欲地尝试。

                    --警告

                    一切正常后,您应该再次启用 SIP;

                    只需再次重启进入恢复模式并在终端中运行

                    # csrutil enable
                    

                    csrutil:Configuring System Integrity Protection

                    【讨论】:

                    • 不,不,不。这是一个在用户空间运行的工具。请参阅stackoverflow.com/a/33024464/743638 了解相对简单的解决方法。禁用对 1. 未签名的内核扩展 2. 修改系统二进制文件 3. 检查和安装系统路径等的保护只是鲁莽。至少建议在安装之前暂时删除 SIP,然后重新打开。
                    • 我不会这样做。这是自找麻烦。有关更优雅的解决方案,请参阅下面的答案。
                    • 这个问题一个多月没有回答。我认为,这是当时唯一“可找到”的解决方案。我将编辑我的答案并带有一些警告以在安装完所有内容后启用 SIP。
                    【解决方案17】:

                    再次安装python:

                    brew 安装 python

                    再试一次:

                    sudo pip install scrapy

                    对我有用,希望对你有帮助

                    【讨论】:

                      【解决方案18】:
                      1. --关闭SIP(系统完整性保护) -- 然后重启,使用命令+R进入调试模式,然后选择终端: csrutil 禁用 重启

                      2.

                      sudo C_INCLUDE_PATH=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include/libxml2 :/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include/libxml2/libxml :/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include pip install scrapy --ignore-installed 6

                      3。 -- 然后删除旧的六,重新安装 sudo rm -rf /Library/Python/2.7/site-packages/six* sudo rm -rf /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/six* sudo pip install 6

                      4。 -- 然后放回去 csrutil 启用 重启

                      -- 糟糕的工作现在

                      【讨论】:

                        猜你喜欢
                        • 2016-01-05
                        • 2017-12-23
                        • 2017-01-28
                        • 2014-07-18
                        • 2018-05-29
                        • 2016-02-02
                        • 1970-01-01
                        • 1970-01-01
                        • 2016-02-05
                        相关资源
                        最近更新 更多