2017-03-23 13 views
17

Từ pip install --help:Mục đích "pip install --user ..." là gì?

--user  Install to the Python user install directory for your platform. Typically ~/.local/, or %APPDATA%\Python on 
      Windows. (See the Python documentation for site.USER_BASE for full details.) 

Các tài liệu cho site.USER_BASE là một wormhole đáng sợ của thú * NIX vấn đề mà tôi không hiểu.

Mục đích của --user bằng tiếng Anh đơn giản là gì? Tại sao phải gói gói hàng vào số ~/.local/? Tại sao không chỉ đặt một tệp thực thi ở đâu đó trong $ PATH của tôi?

+3

"Tôi không muốn kiểm tra tài liệu python cho trang web" - nhưng bạn mong muốn làm điều này cho bạn? Điều đó dường như không tôn trọng những người trên trang web này ... – Shadow

+0

Tôi sẽ downvote bạn vì không kiểm tra tài liệu, nhưng bạn * đã * cố tự trả lời câu hỏi bằng cách kiểm tra sự trợ giúp với 'pip install --help' và bạn đúng về nơi tài liệu 'site.USER_BASE' sẽ dẫn đến. Tôi không thể đổ lỗi cho bạn vì đã dừng sau khi 'pip install --help' thay vì kiểm tra tài liệu' site.USER_BASE'. – user2357112

+1

Có chắc chắn ít hơn "downvote tôi xin vui lòng" cách để cụm từ nó, mặc dù. – user2357112

Trả lời

27

pip mặc định để cài đặt gói Python vào thư mục hệ thống (chẳng hạn như /usr/local/lib/python3.4). Điều này đòi hỏi quyền truy cập root.

--user làm cho gói cài đặt pip trong thư mục chính của bạn thay vào đó, không yêu cầu bất kỳ đặc quyền đặc biệt nào.

+0

Cảm ơn; điều đó có ý nghĩa. Nhưng là điểm của '--user' để đảm bảo rằng người ta không chạy gói như người chủ? (Tôi đang tưởng tượng một cái gì đó tương tự như các tùy chọn Wireshark/kismet/burpsuite để thiết lập các chính sách truy cập nhóm, do đó không cho phép tất cả các tính năng của chương trình chạy dưới dạng root. Có đúng không?) Hoặc là '- tùy chọn của người dùng chỉ có nghĩa là để _allow_ cài đặt không có đặc quyền root? Nếu đó là trường hợp, tại sao tôi không bao giờ sử dụng 'sudo pip install foo_package'? Tôi đã không bao giờ cần root-privelages để cài đặt thông qua pip trước. –

+3

@Rob Truxal. Tôi nghĩ rằng vấn đề là gói sẽ không được nhìn thấy bởi những người dùng khác. Có thể bạn muốn có một phiên bản cũ hơn/mới hơn của một gói nhưng nếu bạn cài đặt nó trên hệ thống, bạn sẽ nhấc bạn đời của bạn lên. – NDEthos

+0

oh! Tham số '--user' là về cách ly người dùng! Điều đó làm cho giống như một ý nghĩa vô lý. Cảm ơn @NDEthos! –

1

Trên hệ điều hành MAC, lý do sử dụng cờ --user là đảm bảo chúng tôi không làm hỏng thư viện mà hệ điều hành dựa vào. Phương thức bảo mật bảo thủ cho nhiều người dùng MAC OS là tránh cài đặt hoặc cập nhật pip bằng lệnh yêu cầu sudo. Như vậy, điều này bao gồm cài đặt để /usr/local/bin ...

Ref: Cài đặt python cho Neovim (https://github.com/zchee/deoplete-jedi/wiki/Setting-up-Python-for-Neovim)

Tôi không phải là tất cả rõ tại sao cài đặt vào /usr/local/bin là một nguy cơ trên MAC cho một thực tế là hệ thống chỉ dựa trên mã nhị phân python trong /Library/Frameworks//usr/bin. Tôi nghi ngờ đó là vì như đã nói ở trên, việc lắp đặt vào /usr/local/bin yêu cầu sudo mở ra cánh cửa để tạo ra một sai lầm tốn kém với các thư viện hệ thống. Do đó, việc lắp đặt vào ~/.local/bin là cách chắc chắn để tránh nguy cơ này.

Ref: Sử dụng python trên máy Mac (https://docs.python.org/2/using/mac.html)

Cuối cùng, đến mức độ đó là một lợi ích của việc cài đặt gói vào /usr/local/bin, tôi tự hỏi nếu nó làm cho tinh thần để thay đổi chủ sở hữu của thư mục từ root để user? Điều này sẽ tránh phải sử dụng sudo trong khi vẫn bảo vệ chống lại các thay đổi phụ thuộc vào hệ thống. * Đây có phải là một bảo mật mặc định là một di tích của các hệ thống Unix thường được sử dụng trong quá khứ (như các máy chủ) không? Hoặc tối thiểu, chỉ là một cách tốt để đi cho người dùng MAC không lưu trữ một máy chủ?

* Lưu ý: Tính năng Bảo vệ tính toàn vẹn hệ thống (SIP) của Mac cũng dường như bảo vệ người dùng thay đổi các thư viện phụ thuộc vào hệ thống.

- E