Làm thế nào để sử dụng pip sau khi nâng cấp OS X El Capitan?

Sau khi cập nhật El Capitan, mình không tể cài đặt pip được. Nó cứ báo lỗi “quá trình không được cho phép” khi pip cố khởi tạo các thư mục mới trong lúc cài đặt.

creating /System/Library/Frameworks/Python.framework/Versions/2.7/share
    error: could not create '/System/Library/Frameworks/Python.framework/Versions/2.7/share': Operation not permitted

Trên thực tế, nhìn tổng thể thì mình không thể tạo các thư mục etc trong những thư mục này. Mình cũng cố sử dụng sudo rồi nhưng không được. Mình cũng thử cả

sudo chflags nouchg /System/Library/Frameworks/Python.framework/Versions/2.7/

 

Nhưng mà cũng k được nốt. Làm thế nào để mình lại cài lại được thành công các thư viện python một lần nữa?

Đã hỏi vào September 11, 2016 Tổng hợp.
Bình luận
Chấp nhận

Cách nhanh gọn là sử dụng homebrew để cài đặt python vào /usr/local/bin để pip  của bạn có thể hoạt động bất chấp khuôn khổ python người dùng có thể chỉnh sửa được.

brew install python
pip --version

Tắt SIP (System Integrity Protection)  cũng là một giải pháp, nhưng mình khuyên bạn không nên dùng cái đó trừ khi là dùng cho các máy chủ được cài tường lửa và được quản lý chuyên nghiệp, nơi bạn có nhân lực để quản lý việc phát hiện sự xâm nhập hoặc nếu bạn là một nhà phát triển hay quản trị viên hệ thống và cần kiểm thử cái gì đó mà cần hoặc không cần SIP.

ls -lO /System/Library/Frameworks/Python.framework/Versions/2.7/
csrutil status

Bạn sẽ thấy cảnh báo giới hạn được thiết lập, cái không thể gỡ bỏ ngay cả khi root trong khi có liên quan đến SIP.

Việc sử dụng homebrew giúp ta có thể quản lý pip và python riêng biệt hơn các phiên bản được hệ thống cung cấp với rất ít sự bảo trì, rất ít rủi ro và đơn giản để bảo trì.

Đã trả lời vào September 11, 2016
Bình luận

Một lựa chọn khác mà không cần phải vô hiệu hóa SIP hoặc cài đặt các phiên bản Python khác, là cài đặt các module chỉ cho người dùng hiện tại sử dụng.

pip install --user <modulename>

 

Nếu đấy là máy cá nhân của bạn, đây sẽ là giải pháp đơn giản nhất và an toàn nhất.

Đã trả lời vào September 11, 2016
Bình luận

Trước hết, việc tắt SIP không phải là cách để giải quyết vấn đề. Dù đấy là lý do mà việc khởi tạo tập tin bị thất bại, nhưng ta đành phải bỏ qua nó thôi. Thứ hai, bạn sẽ đánh mất tất cả các chi tiết tinh tế mà Apple nghĩ rằng họ đã mang lại cho bạn, như là một cầu nối qua pyObjC, khi bạn cài đặt Python của riêng bạn.

(Mình nói với bạn điều này, người ta bảo bạn nên cài python của riêng bạn vào /usr/local nếu bạn là nhà phát triển, còn mình chỉ không thích làm thực hiện điều đó theo cách dễ dàng với brew.)

Một cách hợp lý, bạn sẽ nghĩ về việc cài đặt nó ở đâu đó mà SIP không chặn bạn, và điều này gần như chắc chắn một số pip phụ thuộc sẽ giải quyết cho bạn. Việc cung cấp cho pip thông tin về nơi bạn muốn nó thực hiện cài đặt không phải là phương pháp hữu hiệu như bắt nó bỏ qua những thứ có sẵn từ trước trong / System, đó là nơi mà nó sẽ kiểm tra phần phụ thuộc với nhiều cài đặt phổ biến, những cái cần thiết, ví như six, và SIP khiến pip phá vỡ chính nó khi cố và nâng cấp nó. Đấy thực ra là tác vụ mặc định của pip để cài đặt vào /Library/Python/2.7/site-packages, bạn chỉ cần yêu cầu –ignore-installed để buộc nó cài đặt bất kỳ phiên bản cập nhật nào của các  phần phụ thuộc ở đó.

Không may là, sau đó có thể bạn sẽ nhập module này trong một phiên tương tác hoặc một tập lệnh nhưng không bất thành – nó vẫn ở /các gói chưa được nâng cấp của hệ thống!

Kể từ thời kỳ đầu tiên của các setuptool, Python đã có cách để khiến cho việc tra cứu trở nên rất rõ ràng. Cách này trông có vẻ hơi kỳ một chút (và nên gợi ý tạm dừng cho một số người trong số chúng ta, những người có cảnh giác về bảo mật cao độ và không e ngại về việc dứt khoát đẩy nó lên đầu danh sách mà không cần kiểm tra) bạn có thể đặt một tập tin kết thúc bằng .pth (ví dụ ‘elcap.pth’) trong /Library/Python/2.7/site-packages to đẩy thư mục đó lên trước trạt tự tra cứu bằng các nội dung sau đây:

import sys; sys.path = ['/Library/Python/2.7/site-packages'] + sys.path

 

Hãy bắt đầu một kỳ tác vụ mới, và một lần di chuyển nhanh đến python -m site sẽ xác nhận rằng bạn đã thêm đường dẫn đó vào vị trí đầu tiên và nhập các module sẽ hoạt động.

Sau tất cả các thao tác này, hãy thử cài đặt với pip của lựa chọn –user , hoặc sử dụng  virtualenv – dù sao thì đấy cũng là cách thực hiện tốt nhất cho hầu hết mọi người.

Đã trả lời vào September 11, 2016
Bình luận

Đáp án của bạn

Với việc gửi đáp án, bạn đã đồng ý với Chính sách dữ liệuCác điều khoản của chúng tôi.