"OSError: [Errno 1] Операція не дозволена" при встановленні Scrap в 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'

Я намагався деактивувати функцію без корінь в 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-встановлений virtualenvwrapper" Тож це може бути застосоване і до вашого випадку, без необхідності проходити болісно навколо
Арабаста

Відповіді:


153

Я також вважаю, що абсолютно не потрібно починати злом ОС X.

Я зміг це вирішити, роблячи

brew install python

Здається, що використання python / pip, що постачається з новим El Capitan, має деякі проблеми.


2
Працював і для мене, і отримав мені наступний Python 2.7.X. Ця відповідь має перемогти
Russell_A

3
Це найкраща відповідь для користувачів El Capitan Mac
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

Ви правильно вказали! На це слід прийняти відповідь!
Салагар Muaaz

це зробило це для мене. (Сьєрра 10.13.6)
Гільдія Майкла

@codersofthedark, можливо, brew install python3міг би це вирішити, оскільки в нових системах python3 зараз є пітоном за замовчуванням.
Маріо

399
pip install --ignore-installed six

Зробив би трюк.

Джерело: github.com/pypa/pip/isissue/3165


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

3
не вдалося імпортувати скрап при установці за допомогою цього методуImportError: cannot import name xmlrpc_client
harinsa

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 або встановлювати новий python чи безлад із залежностями.
dietbacon

Для 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 файлів
dietbacon

1
Це працювало для мене на rasa-nlu. sudo pip install --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>працював на мене, не потребуючи перевстановлення python
Datageek

23

Попередження

Я б дуже наполегливо проти модифікувати систему Python на Mac; є численні проблеми, які можуть виникнути.

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

Я також вичерпав би всі інші можливості, перш ніж обходити вбудовану безпеку.

Рішення менеджера пакунків:

Будь ласка, перегляньте інструмент для віртуалізації Python, такий як virtualenv спочатку; це дозволить безпечно експериментувати.

Ще один корисний інструмент для використання мов та програмного забезпечення без конфлікту з вашою Mac OS - це Homebrew . Як і MacPorts або Fink , Homebrew є менеджером пакунків для Mac і корисний для безпечної спроби багатьох інших мов та інструментів.

Встановлення програмного забезпечення "Прокат свого":

Якщо вам не подобається підхід менеджера пакунків, ви можете використовувати /usr/localшлях або створити /opt/localкаталог для встановлення альтернативної установки Python і виправити свої шляхи у своїй .bashrc. Зауважте, що вам потрібно буде включити root для цих рішень.

Як це зробити в будь-якому випадку:

Якщо ви абсолютно повинні відключити перевірку безпеки (і я щиро сподіваюсь, що це щось інше, ніж не возитися із системними мовами та ресурсами), ви можете вимкнути її тимчасово та знову ввімкнути, використовуючи деякі методи в цій публікації про те, як відключити систему цілісність-захист .


2
Це трохи інвестицій у час і вимагає певного володіння командним рядком, але результат того вартий - я використовую подібні віртуальні середовища для Ruby (RVM), Perl тощо. також.
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.

По-перше, слід запустити команду для безкорінного конфігурації на своєму терміналі

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

Потім слід виконати команду нижче на терміналі відновлення розділу (Recovery OS)

# csrutil disable
# reboot

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

--УВАГА

Вам слід знову включити SIP після того, як все працює;

Просто перезавантажте знову в режим відновлення та запустіть у терміналі

# csrutil enable

csrutil: Налаштування захисту цілісності системи


10
Ні-ні-ні. Це утиліта, що працює в просторі користувача. Дивіться stackoverflow.com/a/33024464/743638 щодо відносно простого способу цього. Вимкнути захист від 1. непідписаних розширень ядра 2. змінити системні бінарні файли 3. Оглянути та встановити через системні шляхи тощо тощо - просто безглуздо. Принаймні рекомендуємо TEMPORARILY видалити SIP до встановлення, а потім увімкнути його знову.
Священний

6
Я б цього не робив. Це просить неприємностей. Для більш витонченого підходу до рішення див. Мою відповідь нижче.
Маріо

1
на це питання не відповідали більше місяця. я думаю, це було єдиним на той час "вирішальним" рішенням. я відредагую свою відповідь із деяким попередженням, щоб увімкнути SIP після встановлення кожного введення.
Ергун Озюрт

12

Я намагався встановити AWS через pip в El Capitan, але ця помилка з’являється

OSError: [Errno 1] Експлуатація не дозволена: '/var/folders/wm/jhnj0g_s16gb36y8kwvrgm7h0000gp/T/pip-wTnb_D-uninstall/System/Library/Frameworks/Python.framework/Verspyts/2.7b/xl/sl/slixe//.7.7 1.4.1-py2.7.egg-інформація '

Я знайшов відповідь тут

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

Це працює для мене :)


10

Я отримував таку ж помилку на моєму MacOS Sierra. Я дотримувався цих кроків і успішно міг встановити шарпітний пакет.

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 pip install - скрегінг з встановленою синьою точкою


5

Спробував поєднання декількох відповідей, і це врешті спрацювало:

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

Ура


2

встановити пітон знову:

варити встановити python

спробуйте ще раз:

sudo pip встановити скрап

працює для мене, сподіваюся, це може допомогти


1

Перезавантажте Mac -> після натискання клавіші утримуйте "Command + R" -> Відкриває утиліти OS X -> Відкрийте термінал і введіть "csrutil disabled" -> Перезавантажте OS X -> Відкрити термінал і встановіть прапорець "csrutil status"



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 .platform / Developer / SDKs / MacOSX10.11.sdk / usr / include / libxml2 / libxml: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/ включати Pip install scrap - шість-встановлено шість

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 включити перезавантаження

- лайно зараз працює



-1

Мені не вистачало залежності десь в іншому напрямку, тому я встановив інші вимоги до проекту, як це:

pip install --user -r requirements.txt
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.