Pertanyaan Mengupgrade setuptools pada OSX El Capitan


Saya mencoba memutakhirkan setuptools. Yah sebenarnya saya sedang mencoba untuk meng-upgrade ansible tetapi mencoba untuk meng-upgrade setuptools dan gagal. Mencoba melakukannya sendiri juga gagal. Bahkan mencoba menghapusnya gagal

$ 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'")]

Saya tidak memiliki ide yang foggiest apa yang salah. Melihat semua file dalam /System/Library/Frameworks/Python.framework/Versions/2.7/ dan di bawah setiap file dimiliki oleh root:wheel

Bagaimana saya bisa memperbaikinya?


76
2017-10-20 10:50


asal


Jawaban:


Ini terjadi karena Perlindungan Integritas Sistem diperkenalkan di OS X El Capitan.

Menambah --user python ke perintah memungkinkan ini berfungsi.

Dengan kata lain

pip install --upgrade setuptools --user python

180
2017-11-13 07:38



Jawabannya adalah bahwa Anda tidak dapat memperbarui setuptools di OSX untuk python pabrik yang dikirimkan dengan OS. Alasannya adalah file-file dalam /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python tidak dapat dihapus atau dimodifikasi oleh pengguna. Tidak hanya pengguna biasa tetapi bahkan jika Anda memiliki izin root Anda tidak akan dapat memodifikasi file-file itu.

Tentu Anda dapat menggunakan berbagai metode lain untuk menginstal versi terbaru dari setuptools tetapi ini tidak akan menggantikan paket sistem default. Berarti jika Anda pergi rute yang disarankan menggunakan --user python bendera, atau Anda memilih untuk menginstalnya tanpa root ~/Library, ini tidak akan menimpa versi file sistem.

Alasan Anda atau root tidak dapat memodifikasi default sistem adalah karena pembatasan izin SIP di El Capitan +. Anda dapat menonaktifkan SIP tetapi ini umumnya tidak disarankan.

Sebaliknya satu-satunya solusi yang masuk akal adalah dengan menggunakan virtualenv python.


1
2017-10-10 19:01



Ikhtisar

Masalahnya adalah pustaka Python yang bertentangan, dikombinasikan dengan Sistem Integrity Protection (SIP) di Mac OS yang melindungi sistem pustaka Python.

Solusi terbaik menurut saya adalah mencopot pemasangan dan menginstal ulang instalasi Python Anda sendiri dan menyimpannya secara terpisah ke pustaka Python yang disediakan oleh Mac OS yang dilindungi oleh SIP.

Saya mendukung ini untuk menonaktifkan SIP karena saya berharap SIP menjadi bagian dari rilis Mac OS di masa mendatang dan SIP bukan penyebabnya di sini, itu hanya memperlihatkan masalah pustaka Python yang bertentangan.

Detail

Saya juga memiliki masalah ini mencoba menginstal ansible.

Masalah saya mulai ketika saya mengikuti instruksi instalasi ansible untuk Mac OS, yang menginstal melalui pip dan menginstal pip dengan easy_install seperti yang dijelaskan di Rilis Terbaru Via Pip

Masalahnya adalah ketika menginstal pip dengan cara ini, easy_install adalah Mac OS yang disediakan easy_install di /usr/bin/easy_install tetapi itu menulis ke easy-install.pth file di /Library/Python/2.7/site-packages/easy-install.pth dan bahwa file referensi Mac OS disediakan perpustakaan Python.

Selanjutnya memasang ansible with pip install ansible kemudian melaporkan bahwa persyaratan setuptools dipenuhi oleh Mac OS disediakan perpustakaan Python di /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python
Ansible memerlukan setuptools tetapi tidak menentukan versi. Paket dependen lainnya, paramiko, membutuhkan setuptools> = 11.3, tetapi ini tidak muncul untuk diperiksa ketika menginstal ansible via pip. Ketika Anda mencoba menjalankan ansible meskipun ia mengeluh bahwa alat pengaturan adalah 1.1.6 Ini adalah versi dari setuptools yang disediakan dengan Mac OS, dan sekarang dilindungi oleh SIP, sehingga tidak dapat ditingkatkan.

Daripada menonaktifkan SIP, saya memperbaiki ini dengan mencopot Python lokal saya sebagai petunjuk di https://docs.python.org/2.7/using/mac.html#getting-and-installing-macpython lalu unduh dan pasang lagi.

Jika Anda khawatir tentang rm, Anda dapat mv sebagai gantinya
Untuk uninstall saya lakukan

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

Saya kemudian mengunduh paket penginstal 2.7.13 untuk Mac OS X dari https://www.python.org/downloads/ dan memasangnya.

Ini memasang python dan pip lokal di /Library/Frameworks/Python.framework/Versions/2.7 dan symlink di /usr/local/bin serta prepending /Library/Frameworks/Python.framework/Versions/2.7 ke $ PATH saya. Ini membuat semuanya terpisah dari perpustakaan yang disediakan Mac OS /System/Library/Frameworks/Python.framework dan /usr/bin jadi saya dapatkan

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

Saya kemudian menginstal ansible dengan pip install ansible
Lalu ketika saya berlari which ansible saya mendapat

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

dan masuk pip list 

setuptools (28.8.0)
six (1.10.0)

dan ansible sekarang bekerja untuk saya karena pustaka Mac OS Python tidak direferensikan oleh pemasangan baru.

Perhatikan bahwa karena pengaturan penginstal $ PATH, which python sekarang /Library/Frameworks/Python.framework/Versions/2.7/bin/python dan /usr/local/bin/python adalah symlink untuk ini.
Jika Anda ingin sistem Python Anda harus menggunakan / usr / bin / python atau mengubah $ PATH


1
2018-03-05 12:11