„OSError: [Errno 1] Operacja niedozwolona” podczas instalacji Scrapy w OSX 10.11 (El Capitan) (ochrona integralności systemu)


206

Próbuję zainstalować Scrapy Python Framework w OSX 10.11 (El Capitan) przez pip. Skrypt instalacyjny pobiera wymagane moduły iw pewnym momencie zwraca następujący błąd:

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'

Próbowałem dezaktywować funkcję rootowania w OSX 10.11 za pomocą polecenia:

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

ale nadal pojawia się ten sam błąd po ponownym uruchomieniu komputera.

Wszelkie wskazówki lub pomysły od moich znajomych StackExchangers?

Jeśli to pomaga, pełne dane wyjściowe skryptu są następujące:

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'



Może ci to pomaga bez wyłączania SIP: stackoverflow.com/a/32930419/3090526
nvg58

5
Miałem dokładnie ten sam problem, gdy próbowałem zainstalować „virtualenvwrapper” za pomocą pip, ale to polecenie działało dla mnie: „sudo pip install --ignore-install virtualenvwrapper” Może więc mieć zastosowanie również do twojej sprawy bez konieczności przechodzenia przez bolesne runda
Arabasta

Odpowiedzi:


153

Myślę też, że absolutnie nie jest konieczne rozpoczęcie hakowania OS X.

Byłem w stanie to rozwiązać, robiąc

brew install python

Wygląda na to, że korzystanie z python / pip dostarczanego z nowym El Capitan ma pewne problemy.


2
Pracowałem też dla mnie i dostałem kolejny Python 2.7.X. Ta odpowiedź powinna wygrać
Russell_A,

3
To najlepsza odpowiedź dla użytkowników El Capitan Mac
zzzzzzzzzzzzzzzzzzzzzzzzzzzz

Wskazałeś to poprawnie! Należy zaakceptować odpowiedź!
Muaaz salagar

to mi zrobiło. (Sierra 10.13.6)
Michael Guild

@codersofthedark może brew install python3rozwiązać ten problem, ponieważ w nowszych systemach python3 jest teraz domyślnym pythonem.
Mario

399
pip install --ignore-installed six

Zrobiłby lewę.

Źródło: github.com/pypa/pip/issues/3165


51
Działa to dla mnie dobrze podczas instalowania awscli na El Capitan bez bałaganu przy instalacji Pythona:sudo pip install --ignore-installed awscli
Luke

3
nie można zaimportować złomowania po zainstalowaniu tą metodąImportError: cannot import name xmlrpc_client
harinsa,

3
--ignore-installedFlaga zrobiła lewę dla AWS Elastic Beanstalk Cli również dla mnie. Wreszcie ...
Jan Król

1
to również działało dobrze dla mnie. Myślę, że to powinna być poprawna odpowiedź.
Paul Carlton,

1
To zadziałało dla mnie w sudo pip install --ignore-installed scrapy.
Sophia Feng

89

Jak powiedzieli inne odpowiedzi, wynika to z nowej ochrony integralności systemu, ale uważam, że inne odpowiedzi są nadmiernie skomplikowane.

Jeśli chcesz użyć tego pakietu tylko u bieżącego użytkownika, powinieneś być w stanie zainstalować go dobrze, bez konieczności wyłączania SIP, za pomocą --userflagi. Lubię to:

sudo pip install --user packagename

2
Nie jestem pewien, jak dokładnie działają te różne flagi, ale ta odpowiedź wydaje mi się najbardziej sensowna. (Poza tym zadziałało :)
xdhmoore,

@xdhmoore Dzięki, myślę, że to też haha. Nie trzeba wyłączać SIP ani instalować nowego Pythona lub bałaganu z zależnościami.
dietakon

W przypadku mkvirtualenv nie zainstalowało to pakietu w oczekiwanej lokalizacji / usr / local / bin. Zamiast tego sudo pip install mkvirtualenv --ignore-installed sixdziała zgodnie z oczekiwaniami, umieszczając virtualenvwrapper.sh w / usr / local / bin
Rob

@Rob To naprawdę nie. Flaga --user instaluje się tylko dla bieżącego użytkownika, więc ma sens, aby nie instalował się w folderze, który nie jest specyficzny dla użytkownika. Dla mnie to polecenie instaluje moje pakiety w „/Users/myusername/Library/Python/2.7/lib/python/site-packag‌ es” dla plików .py i „/Users/myusername/Library/Python/2.7/bin” dla plików .sh
dietbacon

1
To działało dla mnie dla rasa-nlu. sudo pip install --user rasa_nlu
nantitv

40

Wysoko głosowane odpowiedzi nie działały dla mnie, wydaje się, że działają dla użytkowników El Capitan. Ale dla użytkowników systemu MacOS Sierra spróbuj wykonać następujące czynności

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

sudo pip install --user <package name>pracował dla mnie, bez konieczności ponownej instalacji pytona
Datageek

23

Ostrzeżenia

Proponuję bardzo silnie na modyfikację systemu Pythona na Mac; może wystąpić wiele problemów.

Twój konkretny błąd pokazuje, że instalator ma problemy z rozwiązywaniem zależności dotyczących Scrapy bez wpływu na bieżącą instalację Pythona. System używa Pythona do szeregu podstawowych zadań, dlatego ważne jest, aby instalacja systemu była stabilna i pierwotnie zainstalowana przez Apple.

Skorzystałbym też z wszystkich innych możliwości, zanim obejdę wbudowane zabezpieczenia.

Rozwiązania do zarządzania pakietami:

Najpierw sprawdź narzędzie do wirtualizacji w języku Python, takie jak virtualenv ; pozwoli ci to bezpiecznie eksperymentować.

Innym przydatnym narzędziem do używania języków i oprogramowania bez konfliktu z systemem Mac OS jest Homebrew . Podobnie jak MacPorts lub Fink , Homebrew jest menedżerem pakietów dla komputerów Mac i jest przydatny do bezpiecznego wypróbowania wielu innych języków i narzędzi.

Instalacje oprogramowania „Rzuć własne”:

Jeśli nie podoba Ci się podejście do menedżera pakietów, możesz użyć /usr/localścieżki lub utworzyć /opt/localkatalog do zainstalowania alternatywnej instalacji Pythona i naprawić ścieżki w swoim .bashrc. Pamiętaj, że musisz włączyć root dla tych rozwiązań.

Jak to zrobić mimo to:

Jeśli absolutnie musisz wyłączyć kontrolę bezpieczeństwa (i mam szczerą nadzieję, że dotyczy to czegoś innego niż bałagan w językach systemowych i zasobach), możesz ją tymczasowo wyłączyć i ponownie włączyć, korzystając z niektórych technik opisanych w tym poście dotyczących wyłączania systemu Ochrona integralności .


2
To trochę inwestycja w czasie i wymaga pewnej znajomości wiersza poleceń, ale wynik jest tego wart - używam podobnych środowisk wirtualnych dla Ruby (RVM), Perla itp. Homebrew jest przydatny do bezpiecznego wypróbowania wielu innych języków i narzędzi także.
rholmes,

16

To załatwiło sprawę:

   sudo pip install scrapy --ignore-installed six

Tak, działa to sudo pip install virtualenvwrapper --ignore-installed sixrównież, unikając tego błędu: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'
Rob

12

Należy wyłączyć „Ochrona integralności systemu”, która jest nową funkcją El Capitan.

Po pierwsze, powinieneś uruchomić komendę rootless config na swoim terminalu

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

Następnie należy uruchomić poniższe polecenie na terminalu partycji odzyskiwania (Recovery OS)

# csrutil disable
# reboot

Właśnie tak rozwiązałem mój problem. Nie jestem pewien, czy pierwsza część jest konieczna. Spróbuj, jak chcesz.

--OSTRZEŻENIE

Powinieneś włączyć SIP ponownie, gdy wszystko zadziała;

Wystarczy ponownie uruchomić komputer w trybie odzyskiwania i uruchomić w terminalu

# csrutil enable

csrutil: Konfigurowanie ochrony integralności systemu


10
nie nie nie. Jest to narzędzie uruchomione w przestrzeni użytkownika. Patrz stackoverflow.com/a/33024464/743638, aby uzyskać stosunkowo prosty sposób na obejście tego. Wyłączanie ochrony z 1. niepodpisanych rozszerzeń jądra 2. modyfikowanie plików binarnych systemu 3. sprawdzanie i montowanie ścieżek systemowych itp. Jest po prostu głupotą. Przynajmniej polecam TEMPORARILY usuwanie SIP do momentu instalacji, a następnie włączanie go ponownie.
Sacrilicious

6
Nie zrobiłbym tego To prosi o kłopoty. Aby uzyskać bardziej wdzięczne podejście do rozwiązania, zobacz moją odpowiedź poniżej.
Mario,

1
na pytanie nie udzielono odpowiedzi przez ponad miesiąc. myślę, że było to jedyne „możliwe do znalezienia” rozwiązanie w tym czasie. zedytuję odpowiedź z pewnym ostrzeżeniem, aby włączyć SIP po zainstalowaniu wszystkich.
Ergun Ozyurt

12

Próbowałem zainstalować AWS przez pip w El Capitan, ale pojawia się ten błąd

OSError: [Errno 1] Operacja niedozwolona: '/var/folders/wm/jhnj0g_s16gb36y8kwvrgm7h0000gp/T/pip-wTnb_D-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lis 1.4.1-py2.7.egg-info ”

Tutaj znalazłem odpowiedź

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

Mi to pasuje :)


10

Otrzymałem ten sam błąd na moim MacOS Sierra. Wykonałem te kroki i udało mi się zainstalować pakiet 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

Wypróbowałem kombinację niektórych odpowiedzi i to ostatecznie zadziałało:

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

Twoje zdrowie


2

zainstaluj ponownie python:

parzenie instalacji pytona

Spróbuj ponownie:

sudo pip install scrapy

działa dla mnie, mam nadzieję, że może pomóc


1

Uruchom ponownie komputer Mac -> przytrzymaj klawisz „Command + R” po gongu uruchamiania -> Otwiera Narzędzia OS X -> Otwórz Terminal i wpisz „csrutil wył.” -> Uruchom ponownie OS X -> Otwórz Terminal i zaznacz „csrutil status”


1

To polecenie działałoby idealnie: D

sudo -H pip install - aktualizacja nazwa_pakietu --ignore-install six


1

Czasami takie zachowanie można osiągnąć, jeśli spróbujesz zainstalować bibliotekę python3 w folderze python2 przy użyciu pip zamiast pip3.


0
  1. - zamknij SIP (System Integrity Protection) - następnie uruchom ponownie, użyj polecenia + R, aby przejść do trybu debugowania, a następnie wybierz terminal: csrutil wyłącz restart

2)

sudo C_INCLUDE_PATH = / Aplikacje / 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/ obejmują złomowanie instalacji pip - instalowane sześć sześć

3. - następnie usuń starą szóstkę, zainstaluj ją ponownie 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 six

4. - następnie ustaw z powrotem csrutil Enable restart

- gówno działa teraz



-1

Brakowało mi zależności gdzie indziej wzdłuż linii, więc zainstalowałem inne wymagania dla tego projektu:

pip install --user -r requirements.txt
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.