OSX El Capitan'da kurulum araçlarını yükseltme


81

Kurulum araçlarını yükseltmeye çalışıyorum. Aslında yanıtlayıcıyı yükseltmeye çalışıyorum ama kurulum araçlarını yükseltmeye çalışıyor ve başarısız oluyor. Kendim yapmaya çalışmak da başarısız oluyor. Kaldırmaya çalışmak bile başarısız oluyor

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

Sorunun ne olduğu hakkında en ufak bir fikrim yok. İçindeki /System/Library/Frameworks/Python.framework/Versions/2.7/ve altındaki tüm dosyalara bakıldığında, her bir dosyanın sahibi olduğuroot:wheel

Nasıl düzeltebilirim?


2
Bir çözümüm yok ama bir açıklamam var: bu muhtemelen yeni Sistem Bütünlüğü Korumasından kaynaklanıyor . pip artık izin verilmeyen şeyleri değiştirmeye çalışıyor sudo. Bu soruya bakın . Bununla başa çıkmak için henüz zaman ayırmadım. --userPip seçeneği ben içine bakmak istiyorum ne olasılıkla gerçek değildir. Her şeyi "güncellemek" için pratik bir çözüm bulursanız, lütfen paylaşın!
Arthur

İle ipdbbağlantılı bir hata alıyorum setuptools. Kurulum araçlarını yükseltmek işe yaramıyor. Bununla birlikte çalışır, --user=pythonancak ipdb hatasını hala düzeltmez.
R11G

Yanıtlar:


189

Bu, OS X El Capitan'da sunulan Sistem Bütünlüğü Koruması nedeniyle olur.

--user pythonKomuta eklemek bunun çalışmasına izin verdi.

Başka bir deyişle

pip install --upgrade setuptools --user python

2
pip(aksine easy_install) sudo gerektirmez, pythonkullanıcı kullanmasına izin verdiğiniz için çalıştığından emin oldum.
Kof

1
Ayrıca Docker kapsayıcısı içindeki CentOS 7 üzerinde çalışır. Bazı nedenlerden dolayı başarısız oldu (ancak aynı kurulum Mayıs 2016'dan önce bu adım olmadan çalıştı ...)
geerlingguy

2
Çalışmasını sağlayamadım ve - kullanıcı seçeneğinin nasıl çalışması gerektiğini anlamıyorum. Benim için işe yarayan şey, kurulum araçlarını yükseltirken (ipython yüklemeyle bağlantılı olarak) Sistem Bütünlüğü Korumasını geçici olarak devre dışı bırakmak ve daha sonra yeniden etkinleştirmek oldu. Bunu yapmak için: kurtarma moduna (cmd + R) önyükleyin, terminali başlatın ve girin csrutil disable. Yeniden başlatın ve yükseltmeden sonra kurtarma moduna yeniden başlayın ve girin csrutil enable. Yeniden başlatmanın ardından, ipython benim için iyi çalışmaya devam etti.
Grav

Bu komutu başarıyla uygulayabilirim ancak güncelleme yapılmadı. Çıktı şöyle görünüyor: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

Nihayet burada verilen talimatları izleyerek işleri çalıştırmayı başardım
diidu

2

Genel Bakış

Sorun, sistem Python kitaplıklarını koruyan Mac OS'de Sistem Bütünlüğü Koruması (SIP) ile birlikte çakışan Python kitaplıklarıdır.

Bence en iyi çözüm, kendi Python kurulumunuzu kaldırıp yeniden kurmak ve bunu SIP tarafından korunan Mac OS tarafından sağlanan Python kitaplıklarından ayrı tutmaktır.

Bunu, SIP'nin gelecekteki herhangi bir Mac OS sürümünün bir parçası olmasını beklediğim ve SIP'nin buradaki neden olmadığı için SIP'yi devre dışı bırakmasını tercih ediyorum, sadece çakışan Python kitaplıkları sorununu ortaya çıkarıyor.

Detaylar

Ben de ansible yüklemeye çalışırken bu sorunu yaşadım.

Sorunum, pip yoluyla yüklemek ve Pip ile Son Sürümler Via Pip'te easy_installaçıklandığı gibi pip yüklemek olan Mac OS için yanıtlanabilir kurulum talimatlarını izlediğimde başladı.

Pip'i bu şekilde yüklerken sorun, easy_installMac OS'de sağlanıyor easy_install, /usr/bin/easy_installancak easy-install.pthdosyaya yazıyor /Library/Python/2.7/site-packages/easy-install.pthve bu dosya, Mac OS tarafından sağlanan Python kitaplıklarına başvuruyor.

Daha sonra ansible'ı kurmak, ansible'da pip install ansibleMac OS tarafından sağlanan Python kitaplığı tarafından kurulum araçları gereksiniminin karşılandığını bildirir, kurulum araçları /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python
gerektirir, ancak bir sürüm belirtmez. Başka bir bağımlı paket olan paramiko, setuptools> = 11.3 gerektirir, ancak bu, pip yoluyla yanıtlanabilir yüklenirken kontrol edilecek gibi görünmüyor. Ansible'ı çalıştırmaya çalıştığınızda, kurulum araçlarının 1.1.6 olduğundan şikayetçi olsa da Bu, Mac OS ile sağlanan kurulum araçlarının sürümüdür ve artık SIP tarafından korunmaktadır, bu nedenle yükseltilemez.

SIP'yi devre dışı bırakmak yerine, https://docs.python.org/2.7/using/mac.html#getting-and-installing-macpython'da ipucu verildiği gibi yerel Python'umu kaldırıp ardından tekrar indirip yükleyerek bunu düzelttim .

Rm hakkında endişeleriniz varsa, bunun yerine mv yapabilirsiniz
Kaldırmak için yaptı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

Daha sonra Mac OS X için 2.7.13 yükleyici paketini https://www.python.org/downloads/ adresinden indirip yükledim .

Bu, yerel bir python ve pip at /Library/Frameworks/Python.framework/Versions/2.7ve /usr/local/binsymlink'leri /Library/Frameworks/Python.framework/Versions/2.7$ PATH'ıma önceden ekleyerek kurdu . Bu, Mac OS tarafından sağlanan kitaplıklardan her şeyi ayrı tutar /System/Library/Frameworks/Python.frameworkve /usr/bin böylece

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

Sonra birlikte yanıtlayıcı 'yüklü pip install ansible
ben çalıştırdığınızda Sonra which ansibleI get

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

ve pip list

setuptools (28.8.0)
six (1.10.0)

ve ansible artık benim için çalışıyor çünkü Mac OS Python kitaplıklarına yeni kurulum tarafından başvurulmuyor.

Yükleyici ayarı nedeniyle $ PATH, which pythonartık /Library/Frameworks/Python.framework/Versions/2.7/bin/pythonve /usr/local/bin/pythonbunun için bir sembolik bağlantıdır.
Python sistemini istiyorsanız, / usr / bin / python kullanmanız veya $ PATH


1

Cevap, işletim sistemi ile birlikte gelen fabrika pitonu için OSX'te kurulum araçlarını güncelleyemeyeceğinizdir. Nedeni, içindeki dosyaların /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/pythonkullanıcı tarafından kaldırılamaması veya değiştirilememesidir. Yalnızca normal kullanıcı değil, kök izinleriniz olsa bile bu dosyaları değiştiremezsiniz.

Elbette kurulum araçlarının daha yeni bir sürümünü yüklemek için çeşitli başka yöntemler kullanabilirsiniz, ancak bu, varsayılan sistem paketini geçersiz kılmaz. Bunun anlamı, --user pythonbayrağı kullanmak için önerilen rotaya giderseniz veya bunları kök olmadan yüklemeyi seçerseniz ~/Library, bunlar sistem dosyaları sürümünü geçersiz kılmaz.

Sizin veya kökün sistem varsayılanlarını değiştirememesinin nedeni, El Capitan + 'daki SIP izin kısıtlamalarından kaynaklanmaktadır. SIP'yi devre dışı bırakabilirsiniz, ancak bu genellikle önerilmez.

Bunun yerine tek mantıklı çözüm bir python virtualenv kullanmaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.