«OSError: [Errno 1] Операция не разрешена» при установке Scrapy в OSX 10.11 (El Capitan) (защита целостности системы)


206

Я пытаюсь установить фреймворк Scrapy Python в OSX 10.11 (El Capitan) через pip. Сценарий установки загружает необходимые модули и в какой-то момент возвращает следующую ошибку:

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'

Я попытался отключить функцию rootless в 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'


Вопросы обсуждаются здесь: apple.stackexchange.com/questions/209572/…
hectorpal

Может быть, вам это поможет без отключения SIP: stackoverflow.com/a/32930419/3090526
nvg58

5
У меня возникла точно такая же проблема, когда я пытался установить "virtualenvwrapper" с помощью pip, но эта команда работала для меня: "sudo pip install --ignore-installa virtualenvwrapper" Так что это может быть применимо и к вашему делу, без необходимости проходить через болезненные окольным
Arabasta

Ответы:


153

Я также думаю, что совершенно не обязательно начинать взламывать OS X.

Я смог решить это с помощью

brew install python

Кажется, что использование python / pip, которое идет с новым El Capitan, имеет некоторые проблемы.


2
Работал на меня тоже, и получил меня следующий Python 2.7.X. Этот ответ должен победить
Russell_A

3
Это лучший ответ для пользователей El Capitan Mac
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

Вы указали это правильно! Это должен быть принят ответ!
Муааз Салагар

это сделало это для меня. (Сьерра 10.13.6)
Майкл Гильд

@codersofthedark, возможно, brew install python3мог бы решить эту проблему, поскольку в более новых системах python3 теперь является питоном по умолчанию.
Mario

399
pip install --ignore-installed six

Сделал бы трюк.

Источник: github.com/pypa/pip/issues/3165


51
Это хорошо сработало для меня при установке awscli на El Capitan, не мешая установке с python:sudo pip install --ignore-installed awscli
Лука

3
не удалось импортировать скрап при установке этим методомImportError: cannot import name xmlrpc_client
Харинса

3
--ignore-installedФлаг также помог мне с AWS Elastic Beanstalk Cli. Наконец ...
Иоанн Король

1
это хорошо сработало и для меня. Я думаю, что это должен быть правильный ответ.
Пол Карлтон

1
Это сработало для меня sudo pip install --ignore-installed scrapy.
София Фенг

89

Как говорилось в других ответах, это из-за новой защиты целостности системы, но я считаю, что другие ответы слишком сложны.

Если вы собираетесь использовать этот пакет только у текущего пользователя, вы сможете установить его без проблем, без необходимости отключать SIP, используя --userфлаг. Как это:

sudo pip install --user packagename

2
Мне неясно, как именно работают эти разные флаги, но мне кажется, что этот ответ имеет смысл. (Кроме того, это сработало :)
xdhmoore

@ xdhmoore Спасибо, я тоже так думаю, ха-ха. Не нужно отключать SIP или устанавливать новый питон или связываться с зависимостями.
dietbacon

Для mkvirtualenv это не установило пакет в ожидаемом месте / usr / local / bin. Вместо этого, sudo pip install mkvirtualenv --ignore-installed sixработает , как и ожидалось, поставив virtualenvwrapper.sh в / USR / местные / бен
Rob

@Rob Это действительно не так. Флаг --user устанавливается только для текущего пользователя, поэтому имеет смысл не устанавливать его в папку, не зависящую от пользователя. Для меня эта команда устанавливает мои пакеты в "/Users/myusername/Library/Python/2.7/lib/python/site-packag‌ es" для файлов .py и "/Users/myusername/Library/Python/2.7/bin" для файлов .sh
dietbacon

1
Это сработало для меня для раса-нлу. Установка sudo pip --user rasa_nlu
nantitv

40

Ответы с высоким рейтингом не сработали для меня, похоже, для пользователей El Capitan. Но для пользователей MacOS Sierra попробуйте следующие шаги

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

sudo pip install --user <package name>работал для меня, без необходимости переустановки питона
Datageek

23

Предупреждения

Я хотел бы предложить очень сильно изменять систему Python на Mac; Есть множество проблем, которые могут возникнуть.

Ваша конкретная ошибка показывает, что у установщика есть проблемы с разрешением зависимостей для Scrapy без влияния на текущую установку Python. Система использует Python для ряда важных задач, поэтому важно поддерживать стабильную установку системы как это было изначально установлено Apple.

Я также исчерпал бы все другие возможности прежде, чем обойти встроенную безопасность.

Решения для диспетчера пакетов:

Пожалуйста, сначала посмотрите на инструмент виртуализации Python, такой как virtualenv ; это позволит вам безопасно экспериментировать.

Еще один полезный инструмент для использования языков и программного обеспечения без конфликта с Mac OS - это Homebrew . Как MacPorts или Fink , Homebrew является менеджером пакетов для Mac и полезен для безопасной работы с множеством других языков и инструментов.

Установка программного обеспечения "Roll your own":

Если вам не нравится подход менеджера пакетов, вы можете использовать /usr/localпуть или создать /opt/localкаталог для установки альтернативной установки Python и исправить ваши пути в вашем .bashrc. Обратите внимание, что вам придется включить root для этих решений.

Как это сделать в любом случае:

Если вам абсолютно необходимо отключить проверку безопасности (и я искренне надеюсь, что это связано с чем-то иным, нежели с работой с системными языками и ресурсами), вы можете временно отключить ее и снова включить, используя некоторые из методов, описанных в этом посте, как отключить систему Целостность-Защита .


2
Это требует больших затрат времени и требует некоторого опыта работы с командной строкой, но результат того стоит: я использую аналогичные виртуальные среды для Ruby (RVM), Perl и т. Д. Homebrew полезен для безопасной работы с множеством других языков и инструментов. также.
rholmes

16

Это помогло мне:

   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'
Роб

12

Вы должны отключить «Системную защиту целостности», которая является новой функцией в El Capitan.

Во-первых, вы должны запустить команду для настройки без root на вашем терминале

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

Затем вы должны выполнить команду ниже на терминале раздела восстановления (Recovery OS)

# csrutil disable
# reboot

Я только что решил свою проблему таким образом. Я не уверен, что первая часть необходима. Попробуй как хочешь.

--ПРЕДУПРЕЖДЕНИЕ

Вы должны снова включить SIP после того, как все заработает;

Просто перезагрузитесь снова в Recovery Mode и запустите в терминале

# csrutil enable

csrutil: настройка защиты целостности системы


10
нет нет нет. Это утилита, работающая в пространстве пользователя. Пожалуйста, смотрите stackoverflow.com/a/33024464/743638 для относительно простого способа обойти это. Отключение защиты от 1. неподписанных расширений ядра 2. модификация двоичных файлов системы 3. проверка и монтирование по системным путям и т. Д. И т. Д. - это просто безрассудство. По крайней мере, рекомендуем ВРЕМЕННО удалить SIP до окончания установки, а затем снова включить его.
Жертвоприношение

6
Я бы не стал этого делать. Это напрашивается на неприятности. Для более изящного подхода к решению см. Мой ответ ниже.
Марио

1
вопрос оставался без ответа более месяца. я думаю, что это было единственное «найденное» решение в то время. я отредактирую свой ответ с некоторым предупреждением, чтобы включить SIP после того, как все было установлено.
Эргун Озюрт

12

Я пытался установить AWS через pip в El Capitan, но эта ошибка появляется

Ошибка OSE: [Ошибка 1] Операция не разрешена 1.4.1-py2.7.egg-инфо»

Я нашел ответ здесь

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

Меня устраивает :)


10

Я получил ту же ошибку на моей 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


5

Попробовал комбинацию некоторых ответов, и в итоге это сработало:

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

ура


2

установить Python снова:

заваривать установить питона

Попробуйте снова:

Судо Пип установить Scrapy

работает для меня, надеюсь, это может помочь


1

Перезагрузите Mac -> удерживайте «Command + R» после перезвона при запуске -> Открывает утилиты OS X -> Откройте терминал и введите «csrutil disable» -> Перезагрузите OS X -> Откройте терминал и проверьте «Состояние csrutil»



1

Иногда такое поведение может быть достигнуто, если вы попытаетесь установить python3 lib в папку python2, используя pip вместо pip3.


0
  1. - закрыть SIP (защита целостности системы) - затем перезагрузиться, использовать команду + R для входа в режим отладки, затем выбрать терминал: csrutil отключить перезагрузку

2.

sudo C_INCLUDE_PATH = / Приложения / Xcode.app / Содержание / Разработчик / Платформы / MacOSX.platform / Разработчик / 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/ включает в себя установку пипа - игнорировать шесть установленных

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 установить шесть

4. - затем установите его обратно csrutil enable reboot

- дерьмо работает сейчас



-1

Мне не хватало зависимости где-то еще вдоль линии, поэтому я установил другие требования для проекта следующим образом:

pip install --user -r requirements.txt
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.