OS OSRrror: [Errno 1] Không được phép hoạt động khi cài đặt Scrapy trong OSX 10.11 (El Capitan) (Bảo vệ toàn vẹn hệ thống)


206

Tôi đang cố gắng cài đặt khung Scrapy Python trong OSX 10.11 (El Capitan) qua pip. Kịch bản cài đặt tải xuống các mô-đun cần thiết và tại một số điểm sẽ trả về lỗi sau:

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'

Tôi đã cố gắng hủy kích hoạt tính năng không root trong OSX 10.11 bằng lệnh:

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

nhưng tôi vẫn gặp lỗi tương tự khi máy khởi động lại.

Bất kỳ manh mối hoặc ý tưởng từ StackExchangers đồng bào của tôi?

Nếu nó giúp, đầu ra kịch bản đầy đủ là như sau:

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'


Các câu hỏi đang được thảo luận ở đây: apple.stackexchange.com/questions/209572/NH
hectorpal

Có thể bạn sẽ giúp bạn mà không cần vô hiệu hóa SIP: stackoverflow.com/a/32930419/3090526
nvg58

5
Tôi đã gặp vấn đề chính xác tương tự khi tôi thử cài đặt "virtualenvwrapper" bằng pip nhưng lệnh này đã có hiệu quả với tôi: "sudo pip install --ignen -wenpper cài đặt" Vì vậy, nó cũng có thể được áp dụng cho trường hợp của bạn mà không phải trải qua đau đớn. vòng quanh
Arabasta

Câu trả lời:


153

Tôi cũng nghĩ rằng hoàn toàn không cần thiết để bắt đầu hack OS X.

Tôi đã có thể giải quyết nó bằng cách làm

brew install python

Có vẻ như việc sử dụng python / pip đi kèm với El Capitan mới có một số vấn đề.


2
Làm việc cho tôi cũng vậy và đã cho tôi bản Python 2.7.X tiếp theo. Câu trả lời này sẽ giành chiến thắng
Russell_A

3
Đây là câu trả lời tốt nhất cho người dùng El Capitan Mac
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz vào

Bạn đã chỉ ra nó một cách chính xác! Điều này nên được chấp nhận câu trả lời!
Muaaz salagar

Điều đó đã làm nó cho tôi. (Sierra 10.13.6)
Michael Guild

@codersofthedark có brew install python3thể giải quyết điều này vì trên các hệ thống mới hơn python3 hiện là python mặc định.
Mario

399
pip install --ignore-installed six

Sẽ làm các mẹo.

Nguồn: github.com/pypa/pip/issues/3165


51
Điều này hoạt động tốt với tôi khi cài đặt awscli trên El Capitan mà không gặp rắc rối với cài đặt python:sudo pip install --ignore-installed awscli
Luke

3
không thể nhập phế liệu khi được cài đặt bằng phương pháp nàyImportError: cannot import name xmlrpc_client
harinsa

3
--ignore-installedcờ cũng đã tạo ra mánh khóe cho AWS Elastic Beanstalk Cli cho tôi. Cuối cùng ...
John the King

1
điều này làm việc tốt cho tôi là tốt. Tôi nghĩ rằng đây nên là câu trả lời chính xác.
Paul Carlton

1
Điều này làm việc cho tôi trong sudo pip install --ignore-installed scrapy.
Sophia Feng

89

Như các câu trả lời khác đã nói, đó là vì Bảo vệ toàn vẹn hệ thống mới, nhưng tôi tin rằng các câu trả lời khác là quá phức tạp.

Nếu bạn chỉ sử dụng gói đó trong người dùng hiện tại, bạn sẽ có thể cài đặt nó tốt, mà không cần phải tắt SIP, bằng cách sử dụng --usercờ. Như thế này:

sudo pip install --user packagename

2
Tôi không rõ chính xác làm thế nào những lá cờ khác nhau này hoạt động, nhưng câu trả lời này dường như có ý nghĩa nhất đối với tôi. (Ngoài ra, nó đã hoạt động :)
xdhmoore

@xdhmoore Cảm ơn, tôi cũng nghĩ vậy haha. Không cần phải vô hiệu hóa SIP hoặc cài đặt một python mới hoặc lộn xộn với các phụ thuộc.
dietbacon

Đối với mkvirtualenv, điều này không cài đặt gói trong vị trí dự kiến ​​/ usr / local / bin. Thay vào đó, sudo pip install mkvirtualenv --ignore-installed sixhoạt động như mong đợi, đưa virtualenvwrapper.sh vào / usr / local / bin
Rob

@Rob Nó thực sự không. Cờ --user chỉ cài đặt cho người dùng hiện tại, do đó, có nghĩa là nó sẽ không cài đặt trong một thư mục không dành riêng cho người dùng. Đối với tôi, lệnh này cài đặt các gói của tôi trong "/Users/myusername/L Library / Python / 2.7 / lib / python / site-packag‌ es" cho các tệp .py và "/Users/myusername/L Library / Python / 2.7 / bin" cho các tệp .sh
dietbacon

1
Điều này làm việc cho tôi cho một rasa-nlu. cài đặt sudo pip --user rasa_nlu
nantitv

40

Các câu trả lời được bình chọn cao không hiệu quả với tôi, nó dường như có hiệu quả với người dùng El Capitan. Nhưng đối với người dùng MacOS Sierra, hãy thử các bước sau

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

sudo pip install --user <package name>làm việc cho tôi, mà không cần phải cài đặt lại con trăn
Datageek

23

Cảnh báo

Tôi sẽ đề nghị rất mạnh mẽ chống lại việc sửa đổi hệ thống Python trên Mac; có rất nhiều vấn đề có thể xảy ra

Lỗi cụ thể của bạn cho thấy trình cài đặt có vấn đề giải quyết các phụ thuộc cho Scrapy mà không ảnh hưởng đến cài đặt Python hiện tại. Hệ thống sử dụng Python cho một số tác vụ thiết yếu, do đó, điều quan trọng là giữ cho cài đặt hệ thống ổn định và như được cài đặt ban đầu bởi Apple.

Tôi cũng sẽ cạn kiệt tất cả các khả năng khác trước khi bỏ qua bảo mật được xây dựng.

Giải pháp quản lý gói:

Vui lòng xem xét một công cụ ảo hóa Python như virtualenv trước; điều này sẽ cho phép bạn thử nghiệm một cách an toàn.

Một công cụ hữu ích khác để sử dụng ngôn ngữ và phần mềm mà không xung đột với hệ điều hành Mac của bạn là Homebrew . Giống như MacPorts hoặc Fink , Homebrew là trình quản lý gói cho Mac và rất hữu ích để thử an toàn nhiều ngôn ngữ và công cụ khác.

Cài đặt phần mềm "Roll your own":

Nếu bạn không thích cách tiếp cận trình quản lý gói, bạn có thể sử dụng /usr/localđường dẫn hoặc tạo /opt/localthư mục để cài đặt cài đặt Python thay thế và sửa các đường dẫn của bạn trong .bashrc. Lưu ý rằng bạn sẽ phải bật root cho các giải pháp này.

Làm thế nào để làm điều đó anyway:

Nếu bạn hoàn toàn phải vô hiệu hóa kiểm tra bảo mật (và tôi thực sự hy vọng nó sẽ làm gì đó ngoài việc làm rối loạn ngôn ngữ và tài nguyên hệ thống), bạn có thể tạm thời vô hiệu hóa nó và kích hoạt lại bằng cách sử dụng một số kỹ thuật trong bài đăng này về cách Vô hiệu hóa Hệ thống Bảo vệ toàn vẹn .


2
Đó là một khoản đầu tư đúng lúc và đòi hỏi sự thành thạo về dòng lệnh, nhưng kết quả rất đáng giá - Tôi sử dụng các môi trường ảo tương tự cho Ruby (RVM), Perl, v.v. Homebrew rất hữu ích để thử an toàn nhiều ngôn ngữ và công cụ khác cũng.
chuyến đi

16

Điều này đã lừa tôi:

   sudo pip install scrapy --ignore-installed six

Có, điều này cũng hoạt động sudo pip install virtualenvwrapper --ignore-installed six, tránh lỗi này: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'
Cướp

12

Bạn nên tắt "Bảo vệ toàn vẹn hệ thống", một tính năng mới trong El Capitan.

Trước tiên, bạn nên chạy lệnh cho cấu hình rootless trên thiết bị đầu cuối của bạn

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

Sau đó, bạn nên chạy lệnh bên dưới trên thiết bị đầu cuối của phân vùng phục hồi (Recovery OS)

# csrutil disable
# reboot

Tôi vừa mới giải quyết vấn đề của mình như thế. Tôi không chắc rằng phần đầu tiên là cần thiết. Hãy thử như bạn muốn.

--CẢNH BÁO

Bạn nên kích hoạt lại SIP sau khi mọi thứ hoạt động;

Chỉ cần khởi động lại một lần nữa vào Chế độ khôi phục và chạy trong thiết bị đầu cuối

# csrutil enable

csrutil: Cấu hình bảo vệ toàn vẹn hệ thống


10
không không không. Đây là một tiện ích chạy trong không gian người dùng. Vui lòng xem stackoverflow.com/a/33024464/743638 để biết cách tương đối đơn giản xung quanh vấn đề này. Vô hiệu hóa bảo vệ khỏi 1. phần mở rộng kernel không dấu 2. sửa đổi nhị phân hệ thống 3. kiểm tra và gắn kết trên đường dẫn hệ thống, v.v. chỉ là ngu ngốc. Ít nhất là khuyến nghị TẠM THỜI loại bỏ SIP cho đến sau khi cài đặt, và sau đó bật lại.
Sắc sảo

6
Tôi sẽ không làm điều này. Đây là yêu cầu rắc rối. Đối với một cách tiếp cận giải pháp duyên dáng hơn xem câu trả lời của tôi dưới đây.
Mario

1
câu hỏi đã được trả lời hơn một tháng. tôi nghĩ rằng, đây là giải pháp "có thể tìm thấy" duy nhất tại thời điểm đó. tôi sẽ chỉnh sửa câu trả lời của mình với một số cảnh báo để kích hoạt SIP sau khi cài đặt xong.
Ergun Ozyurt

12

Tôi đã cố cài đặt AWS qua pip trong El Capitan nhưng lỗi này xuất hiện

OSError: [Errno 1] Thao tác không được phép: '/ var 1.4.1-py2.7.egg-thông tin '

Tôi tìm thấy câu trả lời ở đây

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

Nó làm việc cho tôi :)


10

Tôi đã nhận được cùng một lỗi trên MacOS Sierra của tôi. Tôi đã làm theo các bước này và có thể cài đặt thành công gói đáng sợ.

1. sudo pip install --ignore-installed six
2. sudo pip install --ignore-installed scrapy

MacBook-Air:~ shree$ scrapy version
Scrapy 1.4.0

5

Điều này đã lừa tôi.

cài đặt sudo pip - cài đặt phế liệu


5

Đã thử kết hợp một số câu trả lời và điều này cuối cùng đã có hiệu quả:

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

Chúc mừng


2

cài đặt lại python:

bia cài đặt trăn

thử lại lần nữa:

sudo pip cài đặt phế liệu

làm việc cho tôi, hy vọng nó có thể giúp


1

Khởi động lại Mac -> nhấn và giữ "Command + R" sau khi chuông báo khởi động -> Mở tiện ích OS X -> Mở Terminal và gõ "csrutil vô hiệu hóa" -> Khởi động lại OS X -> Mở Terminal và kiểm tra "trạng thái csrutil"


1

Lệnh này sẽ hoạt động hoàn toàn tốt: D

sudo -H cài đặt pip - nâng cấp gói_name - cài đặt sáu


1

Đôi khi hành vi như vậy có thể đạt được nếu bạn cố gắng cài đặt python3 lib trong thư mục python2 bằng pip thay vì pip3.


0
  1. - đóng SIP (Bảo vệ toàn vẹn hệ thống) - sau đó khởi động lại, sử dụng lệnh + R để vào chế độ gỡ lỗi, sau đó chọn thiết bị đầu cuối: csrutil tắt khởi động lại

2.

sudo C_INCLUDE_PATH = / Ứng dụng / Xcode.app / Nội dung / Nhà phát triển / Nền tảng / MacOSX.pl platform / Developer / SDKs / MacOSX10.11.sdk / usr / bao gồm / libxml2: /Appluggest/Xcode.app/Contents/Developer/ .pl platform / Developer / SDKs / MacOSX10.11.sdk / usr / include / libxml2 / libxml: /Appluggest/Xcode.app/Contents/Developer/Plevelops/MacOSX.pl platform / Development / DSKs / MacX10. bao gồm pip cài đặt phế liệu - cài đặt sáu

3. - sau đó xóa sáu cũ, cài đặt lại sudo rm -rf /L Library / Python2.7 / site-packages / six* sudo rm -rf /System/L Library / Frameworks / Python.framework / Versions / 2.7 / Extras / lib / python / six * sudo pip cài đặt sáu

4. - sau đó thiết lập lại csrutil cho phép khởi động lại

- công việc nhảm nhí bây giờ



-1

Tôi đã thiếu một phụ thuộc ở một nơi khác dọc theo tuyến, vì vậy tôi đã cài đặt các yêu cầu khác cho dự án như thế này:

pip install --user -r requirements.txt
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.