Câu hỏi Nâng cấp công cụ cài đặt trên OSX El Capitan


Tôi đang cố nâng cấp các công cụ thiết lập. Tôi thực sự đang cố gắng nâng cấp ansible nhưng nó đang cố gắng nâng cấp setuptools và thất bại. Cố gắng tự làm nó cũng thất bại. Thậm chí cố gắng gỡ cài đặt nó không thành công

$ sudo -H pip install --upgrade setuptools
Collecting setuptools
  Using cached setuptools-18.4-py2.py3-none-any.whl
Installing collected packages: setuptools
  Found existing installation: setuptools 1.1.6
    Uninstalling setuptools-1.1.6:
Exception:
Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/pip-7.1.2-py2.7.egg/pip/basecommand.py", line 211, in main
    status = self.run(options, args)
  File "/Library/Python/2.7/site-packages/pip-7.1.2-py2.7.egg/pip/commands/install.py", line 311, in run
    root=options.root_path,
  File "/Library/Python/2.7/site-packages/pip-7.1.2-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.2-py2.7.egg/pip/req/req_install.py", line 716, in uninstall
    paths_to_remove.remove(auto_confirm)
  File "/Library/Python/2.7/site-packages/pip-7.1.2-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.2-py2.7.egg/pip/utils/__init__.py", line 315, in renames
    shutil.move(old, new)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 299, in move
    copytree(src, real_dst, symlinks=True)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 208, in copytree
    raise Error, errors
Error: [('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.py', '/tmp/pip-OyTXsR-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.py', "[Errno 1] Operation not permitted: '/tmp/pip-OyTXsR-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.py'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.pyc', '/tmp/pip-OyTXsR-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.pyc', "[Errno 1] Operation not permitted: '/tmp/pip-OyTXsR-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.pyc'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.py', '/tmp/pip-OyTXsR-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.py', "[Errno 1] Operation not permitted: '/tmp/pip-OyTXsR-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.py'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.pyc', '/tmp/pip-OyTXsR-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.pyc', "[Errno 1] Operation not permitted: '/tmp/pip-OyTXsR-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.pyc'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib', '/tmp/pip-OyTXsR-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib', "[Errno 1] Operation not permitted: '/tmp/pip-OyTXsR-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib'")]

Tôi đã không có ý tưởng foggiest có gì sai. Xem tất cả các tệp trong /System/Library/Frameworks/Python.framework/Versions/2.7/ và bên dưới mỗi tệp được sở hữu bởi root:wheel

Làm thế nào tôi có thể sửa chữa nó?


76
2017-10-20 10:50


gốc


Tôi không có giải pháp nhưng tôi có giải thích: có thể là do cái mới Bảo vệ toàn vẹn hệ thống. pip đang cố sửa đổi những thứ không được phép nữa, ngay cả với sudo. Xem câu hỏi này. Tôi chưa dành thời gian để giải quyết vấn đề này. Các --user tùy chọn để pip có lẽ là những gì tôi muốn xem xét. Nếu bạn tìm thấy một giải pháp thực tế để "cập nhật" mọi thứ, hãy chia sẻ! - Arthur
tôi nhận được ipdb lỗi được liên kết đến setuptools. Việc cài đặt công cụ nâng cấp không hoạt động. Nó hoạt động với --user=python nhưng không sửa lỗi ipdb. - R11G


Các câu trả lời:


Điều này xảy ra do Bảo vệ toàn vẹn hệ thống được giới thiệu trong OS X El Capitan.

Đang thêm --user python cho phép lệnh này hoạt động.

Nói cách khác

pip install --upgrade setuptools --user python

180
2017-11-13 07:38



pip (không giống easy_install) không yêu cầu sudo, vì bạn đang sử dụng nó python người dùng, tôi đảm bảo nó hoạt động. - Kof
Tôi đã cọ rửa quá nhiều lựa chọn cho giải pháp đơn giản này ... - Jacksonkr
Cũng hoạt động trên CentOS 7 bên trong một container Docker. Đã thất bại vì một số lý do (mặc dù chính xác thiết lập tương tự đã làm việc mà không cần bước này trước tháng 5 năm 2016 ...) - geerlingguy
Tôi không thể làm cho nó hoạt động được, và tôi không hiểu cách tùy chọn --user được cho là hoạt động. Những gì làm việc cho tôi là vô hiệu hóa System Integrity Protection tạm thời trong khi nâng cấp setuptools (kết nối với cài đặt ipython) và sau đó kích hoạt lại nó sau đó. Để thực hiện việc này: khởi động vào chế độ khôi phục (cmd + R), khởi động thiết bị đầu cuối và nhập csrutil disable. Khởi động lại và sau khi nâng cấp, hãy khởi động lại chế độ khôi phục và nhập csrutil enable. Sau khi khởi động lại, ipython tiếp tục làm việc tốt cho tôi. - Grav
Tôi có thể thực hiện lệnh này thành công, nhưng không có bản cập nhật nào được thực hiện. Đầu ra trông như thế này: Collecting setuptools Using cached setuptools-28.2.0-py2.py3-none-any.whl Requirement already up-to-date: python in /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload Installing collected packages: setuptools Successfully installed setuptools-1.1.6 - diidu


Câu trả lời là bạn không thể cập nhật setuptools trên OSX cho python nhà máy đi kèm với hệ điều hành. Lý do là các tệp trong /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python người dùng không thể xóa hoặc sửa đổi. Không chỉ người dùng bình thường mà ngay cả khi bạn có quyền root, bạn sẽ không thể sửa đổi các tệp đó.

Chắc chắn bạn có thể sử dụng nhiều phương pháp khác để cài đặt phiên bản mới hơn của công cụ thiết lập nhưng điều này sẽ không ghi đè gói hệ thống mặc định. Có nghĩa là nếu bạn sử dụng tuyến đường được đề xuất sử dụng --user python gắn cờ hoặc bạn chọn cài đặt chúng mà không cần root ~/Library, chúng sẽ không ghi đè lên phiên bản tệp hệ thống.

Lý do bạn hoặc gốc không thể sửa đổi mặc định hệ thống là do hạn chế quyền SIP trong El Capitan +. Bạn có thể tắt SIP nhưng điều này thường không được khuyến nghị.

Thay vào đó, giải pháp hợp lý duy nhất là sử dụng một virtualenv python.


1
2017-10-10 19:01





Tổng quan

Vấn đề là các thư viện Python xung đột, kết hợp với Bảo vệ toàn vẹn hệ thống (SIP) trên Mac OS để bảo vệ các thư viện Python hệ thống.

Giải pháp tốt nhất theo ý kiến ​​của tôi là gỡ cài đặt và cài đặt lại bản cài đặt Python của riêng bạn và giữ riêng biệt với các thư viện Python do Mac OS cung cấp được bảo vệ bởi SIP.

Tôi ủng hộ điều này để vô hiệu hóa SIP như tôi mong đợi SIP là một phần của bất kỳ bản phát hành Mac OS trong tương lai và SIP không phải là nguyên nhân ở đây, nó chỉ cho thấy vấn đề xung đột thư viện Python.

Chi tiết

Tôi cũng đã có vấn đề này cố gắng để cài đặt ansible.

Vấn đề của tôi bắt đầu khi tôi làm theo hướng dẫn cài đặt ansible cho Mac OS, đó là cài đặt thông qua pip và cài đặt pip với easy_install như mô tả tại Thông cáo mới nhất Via Pip

Vấn đề là khi cài đặt pip theo cách này, easy_install là hệ điều hành Mac được cung cấp easy_install tại /usr/bin/easy_install nhưng nó viết cho easy-install.pth tập tại /Library/Python/2.7/site-packages/easy-install.pth và tệp đó tham chiếu tới Mac OS cung cấp các thư viện Python.

Sau đó cài đặt ansible với pip install ansible sau đó báo cáo rằng yêu cầu setuptools được thỏa mãn bởi Mac OS cung cấp thư viện Python tại /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python
Ansible yêu cầu setuptools nhưng không chỉ định phiên bản. Một gói phụ thuộc khác, paramiko, yêu cầu setuptools> = 11.3, nhưng điều này dường như không được kiểm tra khi cài đặt ansible qua pip. Khi bạn cố gắng chạy ansible mặc dù nó phàn nàn rằng công cụ thiết lập là 1.1.6 Đây là phiên bản của setuptools được cung cấp với Mac OS, và bây giờ được bảo vệ bởi SIP, do đó, nó không thể được nâng cấp.

Thay vì tắt SIP, tôi đã sửa lỗi này bằng cách gỡ cài đặt Python cục bộ của mình như được gợi ý tại https://docs.python.org/2.7/using/mac.html#getting-and-installing-macpython và sau đó tải xuống và cài đặt lại.

Nếu bạn lo ngại về rm, bạn có thể thay thế
Để gỡ cài đặt tôi đã làm

sudo rm -rf /Library/Python
sudo rm -rf /Applications/Python\ 2.7/
sudo rm /usr/local/bin/ansible  # executable
sudo rm /usr/local/bin/python*  # symlinks to /Library/Python/2.7
sudo rm /usr/local/bin/easy_install*
# and so on for references to /Library/Python/2.7 in /usr/local/bin

Sau đó tôi đã tải xuống gói cài đặt 2.7.13 dành cho Mac OS X từ https://www.python.org/downloads/ và cài đặt nó.

Điều này đã cài đặt một con trăn cục bộ và pip tại /Library/Frameworks/Python.framework/Versions/2.7 và các liên kết tượng trưng trong /usr/local/bin cũng như chuẩn bị /Library/Frameworks/Python.framework/Versions/2.7 đến $ PATH của tôi. Điều này giúp mọi thứ tách biệt khỏi thư viện được cung cấp bởi Mac OS tại /System/Library/Frameworks/Python.framework và /usr/bin để tôi có được

which pip
/Library/Frameworks/Python.framework/Versions/2.7/bin/pip

Sau đó tôi đã cài đặt ansible pip install ansible
Sau đó, khi tôi chạy which ansible tôi có

/Library/Frameworks/Python.framework/Versions/2.7/bin/ansible

và trong pip list 

setuptools (28.8.0)
six (1.10.0)

và ansible bây giờ hoạt động cho tôi bởi vì các thư viện Python của Mac OS không được tham chiếu bởi bản cài đặt mới.

Lưu ý rằng do cài đặt trình cài đặt $ PATH, which python Hiện tại là /Library/Frameworks/Python.framework/Versions/2.7/bin/python và /usr/local/bin/python là một liên kết tượng trưng cho điều này.
Nếu bạn muốn hệ thống Python bạn sẽ phải sử dụng / usr / bin / python hoặc thay đổi $ PATH


1
2018-03-05 12:11