OS X El Capitan yükseltmesinden sonra pip nasıl kullanılır?


116

El Capitan güncellemesinden sonra pip kurulumunu çalıştıramıyorum. Aldığım hata pip yükleme sırasında yeni klasörler oluşturmaya çalıştığında "işleme izin verilmiyor" olmasıdır.

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

Aslında, genel olarak bu klasörlerde klasör vb. Oluşturamıyorum. Yardım etmeyen sudo kullanmayı denedim. Ayrıca yaptım

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

Yukarıdakiler de yardımcı olmadı. Python kütüphanelerini tekrar sorunsuz kurabilmek için ne yapabilirim?


1
Pip sisteminizde nerede?
user151019

$ pip / usr / yerel / bin / pip
web_ninja 6:15

$ pip --version pip 7.1.2 / Liberal/Python/2.7/site-packages/pip-7.1.2-py2.7.egg (python 2.7)
web_ninja

Pip'i nasıl kurdunuz - /Library/Python/2.7/site-packages not / System
user151019

Şimdi hatırlamıyorum Sorun olduğunu ve python yüklemek için demlemek kullanılan ve pip yerini düzelten yorum gönderdikten sonra düşündüm.
web_ninja

Yanıtlar:


84

Hızlı bir çözüm kullanmaktır homebrew yüklemek pythoniçine /usr/local/binsenin böylece pipbir kullanıcı tarafından değiştirilebilir piton çerçevesinde karşı çalışabilir.

brew install python
pip --version

Sistem Bütünlüğü Korumasını Devre Dışı Bırakmak da bir seçenektir, ancak izinsiz giriş algılamayı yönetecek insan gücüne sahip olduğunuz ya da bir geliştirici / sysadmin olduğunuz ve test edip etmeyeceğiniz şeyleri test etmek için profesyonelce yönetilen ve ateş duvarlı sunucular dışında hiçbir şey için tavsiye etmiyorum. YUDUM.

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

Sınırlı bayrağın SIP ile meşgul iken root olarak bile kaldırılamayacak şekilde ayarlandığını göreceksiniz .

Homebrew kullanmak, pip ve python'u sağlanan sistem sürümünden ayrı olarak yönetmeyi mümkün kılar. Bir bonus olarak, homebrew çerçevesi otomasyonla bakım ve yama / işleri kolaylaştırmak için tasarlanmıştır.



@ jayatubi Hangi paket ya da script sizin için kararsız? Python 2.7.10'u demire mi, yoksa sadece büyük bir yumru olan ve geriye doğru uyumlu olmadığı bilinen python3'ü mü kuruyorsunuz? Gereksinimleriniz için az ya da çok kararlı bir sürüm tercih ederseniz, onlarca sürüm arasından seçim yapabilirsiniz.
bmike

1
O Kabul brew install pythonEğer bir süre sistem Python kullanıyorum eğer diğer bazı kurulum temizlemeye olsa (örneğin kök mülkiyetindeki Python dosyaları altında gerekebilir, en basit seçenektir /usr/local/binve ~/Library/Caches/pip)
RichVel

Derlenmiş bir python .pkg dosyasını, örneğin python.org/downloads/release/python-2712 adresinden indirmek 10.8'de benim için iyi çalışıyor. Bu konuda homebrew hakkında yorumunuz var mı? Teşekkürler
denis

@denis Beğendiğiniz brewbir sürümü sabitlemek kolay olduğundan, birden çok farklı sürümü yönetmenizi veya işleri düzenli olarak güncel tutmanızı seviyorum. Sizin için işe yarayan bir şey varsa, yine de - bir şeyi değiştirmeniz gerektiğini iddia etmek zor.
bmike

77

SIP'yi devre dışı bırakmaya veya diğer Python sürümlerini kurmaya gerek kalmadan uygulanabilir başka bir seçenek de modülleri yalnızca kullanan kullanıcı için kullanmaktır.

pip install --user <modulename>

Bu sadece sizin kişisel makineniz ise, bu en basit ve en güvenli çözüm olacaktır.


1
Belki El Capitan / usr / bin / pip sağladı, ancak macOS Sierra sağlamaz.
sigjuice

1
Sierra üzerinde çalışıyor
harryparkdotio

57

Bu sorun genellikle pip El Capitan'da IPython için bir manpage kurmaya çalıştığında ortaya çıkar. Hızlı düzeltme şöyle bir pip komutu kullanmaktır:

sudo -H pip install --install-option '--install-data=/usr/local' <package>

Bununla birlikte, El Capitan'daki Sistem Bütünlüğü Koruması (SIP), eskiden beri kullandığı pip ile birkaç kötü uygulamanın engellenmesini sağlar, bu nedenle muhtemelen El Capitan'da pipin sorunsuz çalışmasını sağlamak için bazı değişiklikler yapmanız gerekecektir.

El Capitan'daki SIP, OS X'te Apple tarafından sağlanan Python sürümü ile pip kullanma konusunda üç sorun ortaya koyuyor:

  1. distutils, Mac’lerde iki önemli değişkeni doğru bir şekilde belirlemediğinden, pip başlıkları ve diğer paylaşılan dosyaları (örneğin, manpages) yazmaya çalışır /System/Library/Frameworks/Python.framework/Versions/2.7/. Bu kötü bir fikir, ancak OS X'in önceki sürümlerinde, pip sudo ile çalıştırıldığında başarılı oldu. Ancak SIP nedeniyle El Capitan'da başarısız oldu. Karşılaştığınız hata bu. Gibi mesajlar verirOSError: [Errno: 1] Operation not permitted: '/System/Library/Frameworks/Python.framework/Versions/2.7/share'

  2. Apple bazı paketlerin eski sürümlerini /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/(örneğin altı) kurar . OS X'in önceki sürümlerinde, bunlardan birinin daha yeni bir sürümüne ihtiyaç duyan bir paket kurduğunuzda sudo pip, eski sürümü sessizce /System/klasörden kaldırır ve içine daha yeni bir sürüm yüklerdi /Library/Python/2.7/site-packages. Bu aynı zamanda kötü bir fikirdi ve SIP ile artık mümkün değil. Ancak eski pip kaldırılmaya çalışılırken şimdi pip bir hata mesajı ile kilitleniyor. Bu mesaj aynı zamanda OSError: [Errno: 1], ancak bir mesajdan sonra geliyor Uninstalling six-1.4.1:. Bakınız, örneğin, https://github.com/pypa/pip/issues/3165 .

  3. Python'un Apple sürümü , standart kullanıcı tarafından erişilebilir paket kurulum konumlarının üzerindeki/System/Library/Frameworks/Python.framework/Versions/2.7/ python arama yolunun altına birkaç dizin ekler . Böylece başka bir paketin daha yeni bir sürümünü yüklerseniz (örn. ), Kurulumun başarılı olduğunu belirten bir mesaj alacaksınız, ancak daha sonra python çalıştırdığınızda eski sürümü alacaksınız . Bu aynı zamanda standart kütüphanedeki modüller ile aynı isimde yeni paketlerin kullanılmasını imkansız hale getirir.sudo -H pip install --ignore-installed six/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/

Bu sorunları çözebilirsiniz, ancak yöntem, üç soruya verdiğiniz yanıtlara bağlıdır.

  1. Python'un Mac OS X sürümünü kullanmaya devam etmek mi yoksa kendi kurulumunuzu kurmak mı istiyorsunuz? Kendi kurulumunuzu yapmak en güvenli seçenektir ve resmi Python kurulum programı Homebrew veya Anaconda ile yapılabilir. Bu aynı zamanda Apple'ın önerdiği şeydir , @Sacrilicious tarafından belirtildiği gibi . Kendi Python sürümünüzü yüklerseniz, muhtemelen şu anda yüklü olan her şeyi /Library/Python/2.7/site-packagesve /usr/local/binbu paketler için yüklenen komut dosyalarını (pip dahil) kaldırmalısınız . Aksi takdirde, sisteme yüklenmiş Python sürümüne erişen ve bazılarının kendi kurulumunuza erişen sinir bozucu deneyimine sahip olacaksınız.

Sistem yüklü Python'a bağlı kalmak istiyorsanız, iki karar daha vermeniz gerekir:

  1. Tüm kullanıcılar için mi yoksa sadece kendiniz için mi paketleri kurmak istiyorsunuz? Tüm kullanıcılar için yükleme, Python kullanan her programın (muhtemelen yönetimsel komut dosyaları dahil), yüklediğiniz tüm paketlere erişebilmesini sağlar. Bununla birlikte, El Capitan'ın Python'u kullanmasına engel olma ihtimali çok uzak. (Umarım, Apple python -Sher zaman bekledikleri paketleri aldıklarından emin olmak için kullanır , ancak bunu test etmenin bir yolu yoktur.) Yalnızca kendi kullanıcı hesabınız için yüklemek, Python kurulumuna müdahale etme olasılığını ortadan kaldırır. Not: Sistem genelinde kurulumdan yalnızca kullanıcıya geçiş yapacaksanız, şu anda yüklü olan herhangi bir şeyi /Library/Python/2.7/site-packagesve ilgili komut dosyalarını kaldırmak için muhtemelen bu şansı kullanmalısınız /usr/local/bin.

  2. Python'un (altında /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/) OS X sürümünde yüklü olan ekstra paketleri gizlemek mi yoksa arama yolunda tutmak mı istersiniz? Bunları gizlemenizi öneririm, böylece bu paketlerin en yeni sürümleri gerektiğinde otomatik olarak kullanıcının erişebileceği yerlere kurulur. Bu dizini gizlemezseniz, zaman zaman pip'in daha sonra bir sürüme yükseltmek için varolan bir paketi kaldıramadığını belirten iletiler alırsınız (yüklediğiniz farklı bir paket için gereklidir). Bu durumda, daha pip install --ignore-installed <package>yeni sürümü yükleyecek ve sistemin kurulu sürümünü gizleyecek şekilde çalıştırmanız gerekecektir. Ancak, eğer tamamını saklarsanız/System/.../Extras/...dizininde pip aracılığıyla kullanılamayan bazı Apple paketlerine, yani CoreGraphics ve bonjour'a erişemezsiniz. (Bunlara ihtiyacınız olursa, bunları site paketleri dizininize bağlayarak erişebilirsiniz.)

Şimdi, işte geçici çözümler. İşletim sistemi tarafından kullanılan Python paketlerini yanlışlıkla değiştirmek veya çıkarmaktan kaçınmak için OS X'in tüm sürümlerinde iyi bir uygulama olacaktır; ancak, OS X El Capitan'da (10.11) Apple tarafından sağlanan Python sürümüyle kullanıcı tarafından yüklenmiş paketleri kullanmak istiyorsanız, bunlar çok önemlidir.

Pip yüklemek

Muhtemelen bunu zaten yaptınız, ancak değilse, tüm kullanıcılar için pip yüklemek için aşağıdaki komutu kullanabilirsiniz :

sudo -H easy_install pip
# pip script will be installed in /usr/local/bin

Veya sadece kendi kullanıcı hesabınıza pip yüklemek için bu komutu kullanın :

easy_install --user pip
# pip script will be installed in ~/Library/Python/2.7/bin

Paylaşılan Dosya Konumlarını Yönet

Tüm kullanıcılar için paket yüklüyorsanız, bu satırları içeren .pydistutils.cfg adlı bir dosya oluşturun ( https://github.com/pypa/pip/issues/426 adresinden ):

[install]
install-data=/usr/local
install-headers=/usr/local

Genelde kullanıyorsanız sudo -H pip ..., o zaman bu dosyayı /var/root(kök kullanıcı için home dizini) koymalısınız . Genelde kullanıyorsanız sudo pip ..., bu dosyayı kendi ana dizininize (~) koymalısınız.

Bu ayarlar, pip'in başlıklar ve man sayfaları gibi paylaşılan öğeleri yazmaya çalışmasını önler /Library/System. (Bu cevabın en üstündeki komut aynı şeyin daha hızlı bir versiyonudur.) Bu ayarlara ihtiyaç duyulur, çünkü darwin'e özgü kod /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/command/install.pybu değişkenleri kök yazılabilir konumlara ayarlayamaz (diğer değişkenleri doğru ayarlamasına rağmen). Bu konuda daha fazla bilgi var https://github.com/pypa/pip/issues/3177 .

Yalnızca kendi kullanıcı hesabınız için paketleri yüklerseniz, paylaşılan öğeler otomatik olarak altına yüklenir ~/Library/Python/2.7/. Ancak, paylaşılan öğelerin ihtiyacınız olduğunda bulunabilmesi için ~ / .profile öğenize aşağıdaki satırları eklemelisiniz:

export PATH=~/Library/Python/2.7/bin:$PATH
export MANPATH=~/Library/Python/2.7/share/man:$MANPATH

Not: değişikliklerin geçerli olması için yeni bir kabuk başlatmanız veya komut satırında çalıştırmanız gerekir. Ayrıca, hash -ryakın zamanda eski komut dosyalarını yoldan kaldırdıysanız da çalıştırmak isteyebilirsiniz .

Python Yolunu Yönet

Yüklediğiniz paketlerin Python'un arama sırasındaki sistem yüklü paketlerden daha yüksek olduğundan emin olmanız gerekir. Bunu yapmanın en kolay yolu .pthdosyalardır. Bu, @ Sacrilicious'ın bu sayfadaki herhangi bir yerdeki önerisini izler , ancak kullanıcı site paketleri dizininizin sistem genelindeki site paketleri dizininizden önce aranmasını ve her ikisinin de standart kitaplıktan ve Apple'ın Ekstralar dizinden önce (her ikisi de / System / altında) aranmasını sağlar. ..). Ayrıca /System/.../Extrasistenirse arama yolundan çıkar.

fix_mac_path.pthAşağıdaki metni kullanarak adlı bir dosya oluşturun . Tüm kullanıcılar için paket yüklüyorsanız, fix_mac_path.pth yerleştirilmelidir /Library/Python/2.7/site-packages. Yalnızca kendi kullanıcınız için yüklüyorsanız fix_mac_path.pth , ~ / Library / Python / 2.7 / lib / python / site-paketleri içinde olmalıdır. (Bu dosyanın istediğiniz bir adı olabilir, ancak bu konumlardan birine veya ikisine birden yerleştirilmesi gerekir ve bununla bitmesi gerekir .pth; ayrıca, bu dosyadaki tüm metinlerin bir satırda olması gerekir.)

Apple yüklü paketleri gizlemek istiyorsanız /System/.../Extras:

İlk önce Apple tarafından sağlanan sürümden bağımsız olarak pip / setuptools'un çalışan bir kopyasını almak için aşağıdaki komutlardan birini çalıştırın:

pip install --ignore-installed --user setuptools   # your account only
# or
sudo -H pip install --ignore-installed setuptools  # all users

Ardından, aşağıdaki kodu fix_mac_path.pthyukarıda belirtilen konuma yerleştirin:

import sys; std_paths=[p for p in sys.path if p.startswith('/System/') and not '/Extras/' in p]; sys.path=[p for p in sys.path if not p.startswith('/System/')]+std_paths

Apple tarafından yüklenen paketleri kullanmaya devam etmek istiyorsanız, başka bir kurulum aracı kopyası yüklemeniz gerekmez. Sadece aşağıdaki kodu fix_mac_path.pthyukarıda belirtilen yere girin:

import sys; std_paths=[p for p in sys.path if p.startswith('/System/')]; sys.path=[p for p in sys.path if not p.startswith('/System/')]+std_paths

Bundan sonra python -m site, yol arama sırasının mantıklı olduğundan emin olmak için kullanabilirsiniz .

Paketleri Kur

Bundan sonra, aşağıdaki komutlardan birini kullanarak yeni paketler kurabilmelisiniz.

Bütün kullanıcılar için:

sudo -H pip install <package>

Kendi kullanıcı için:

pip install --user <package>

Alternatifleri ile çok net bir şekilde yazıldığından. Bu kılavuzu takip ettim ve başarılı bir şekilde “altı” kütüphane sorununu çözebildim ve mitmproksi kurmamı sağladı.
Paul Chernoch

1
Bu gerçekten stackoverflow'ta karşılaştığım en bilgilendirici, eksiksiz ve yardımcı cevaplardan biri. Aferin ve teşekkürler.
cmsjr

@cmsjr, teşekkürler! Neler olup bittiğini anlamak biraz zaman aldı ve bu bana geri dönmem için iyi bir yer verdi!
Matthias Fripp

4
Bugüne kadar gördüğüm en net ve en eksiksiz açıklama, özellikle mevcut sistem Python karmaşasının temizlenmesi - teşekkür ederim! Ana geliştirmem, demiryoluna takılmış bir Python kullanılmasını şiddetle tavsiye ederim, çünkü bu çok kolay ve sudo gerektirmeyen temiz bir kurulum sağlıyor. Bu geliştirme projeleri için sanal ortamlara ek olarak.
RichVel

Ne felaket. Çok yaşa.
Matt M.

31

İlk olarak, SIP'yi sorunu çözmenin bir yolu olarak devre dışı bırakmıyorsunuz. Üzgünüm, bu klasör oluşturma işleminin başarısız olmasının nedeni bu ancak bunun üzerinde çalışmamız gerekiyor. İkincisi, kendi Python'unuzu kurduğunuzda Apple'ın size verdiği, tüm pyObjC köprülerindeki gibi verdikleri tüm güzellikleri kaybedersiniz.
(İtiraf edeceğim, geliştirici iseniz , kendinizinkini yüklemeniz gerektiğini söylüyorlar/usr/local , ben sadece demlemeyle kolay şekilde yapmaya itiraz ediyorum .)

Mantıksal olarak, SIP'in sizi engellemediği bir yere kurmayı düşünürsünüz ve bu neredeyse kesinlikle bir bağımlılık pipinin sizin için çözmekte olduğu bir durumdur. Piplere kurulum yapmak istediğinizi söylemek, / Sistem içindeki önceden var olan şeyleri görmezden gelmek kadar çare değildir; örneğin six, ihtiyaç duyulan birçok genel kurulum için bağımlılıkları kontrol eder. denemek ve yükseltmek için gittiğinde kendini kırmak Aslında /Library/Python/2.7/site-packages 'a yüklemek pip'in varsayılan davranışıdır, sadece --ignore-installedorada bağımlılıkların güncellenmiş versiyonlarını kurmaya zorlamanız gerektiğini söylemeniz gerekir .
... Ne yazık ki, daha sonra bu modülü etkileşimli bir oturumda veya komut dosyasında içe aktarabilir ve güzel yağ hataları elde edebilirsiniz - hala / Sistem'in yükseltilmemiş paketine bakıyor!

İlk kurulum günlerinden beri, Python'un bu aramayı açık hale getirmenin bir yolu var. Bu biraz tuhaf görünümlü, (ve güvenlik bilincine ve kontrol etmeden listenin üst tıkıyorum ait Düflüncesizlik hakkında heyecan değildir bizler için duraklama ortaya kaplaması gerekir) Eğer ile biten bir dosya yerleştirebilirsiniz .pth( örneğin 'elcap.pth') /Library/Python/2.7/site-packagesbu dizini aşağıdaki içeriklerle arama sırasının önüne itmek için:
import sys; sys.path = ['/Library/Python/2.7/site-packages'] + sys.path

Yeni bir oturum python -m sitebaşlattığınızda, bu yolu ilk yuvaya eklediğinizi onaylamak için hızlı bir yolculuk yapın ve modüllerin içe aktarılması çalışmalıdır.

Oh, ve bunlardan sonra, pip --userseçeneğiyle yüklemeyi deneyin ya da sanalenv kullanmayı deneyin - bu zaten çoğu insan için en iyi yöntemdir.


1
Şimdi bu zarif ve benim basit "Python sisteminden vazgeç ve onu temizle" çözümüm için iyi bir karşıtlık. Çabuk ve kirli olmanız gerekiyorsa, bu çabaya değmeyebilir, ancak pyObjC ve bir pitonu tutmanın büyük yararı vardır.
bmike

2
Daha pitonik ve mantıklı --userbir sanalenv olarak yüklemek veya kullanmak olacaktır. Bir sistem için bir kez yüklediğiniz ve kullanıcının sistemi geçersiz kılabileceği konusunda, sadece bir sistem yöneticisi olarak düşünüyorum. Bu çözümün itirazları sistemin değiştirilmiş bir yola bakıyor olabileceği olabilir, ancak easy_install'ın bir .pth dosyası da yazabileceği emsali vardır.
Sacrilicious

2
Demleme yolunun kolay mı, yanlış yol mu olduğunu bilmiyorum - sorun çözme meselesi ve brew sorunumu sadece olağanüstü bir şekilde çözüyor - yeni oyuncaklarla oynamak için ne kadar çaba harcayacağına dair tek başına düşünmek (yakut 2.2) .3, python3.5, MongoDB, Node4.2.1) rahat bir şekilde, bir komut yazmak gibi ve yeniden derler, günceller ve thrash'i çıkarır - peki, o zaman kolay yolu alıyorum :) Ne olduğunu bilmiyorum Python'un OS X sürümü, Cocoa ve Threads desteğini ve daha önce hiç kullanmadığım bir sürü paketi bir kenara ayırıyor ve gerçekten de Xcode / Kernel sayfa
yığınımı derledim

Elcap.pth'i /Library/Python/2.7/site-packages dizinine ekledim, şimdi o yolu sys.path 0 ve 2 dizinlerinde görüyorum. Sonra denedim sudo pip install --ignore-installed ipythonve "pexpect için setup.py kurulumunu çalıştırıyor" olana kadar çalışıyor, bu noktada pip hala /System/Library/Frameworks/Python.framework/Versions/2.7/share içinde bir şeyi yükseltmeye çalışıyor ve hata veriyor.
kojiro

Virtualenv'in kurulması pip kullanımını gerektirir, bu yüzden pip kullanımıyla ilgili herhangi bir sorunu çözmez. Olduğu gibi, onu pip --userkuruyorum ve virtualenv hala çalışmıyor.
user5359531 16:16

4

Sanırım bunun nedeni SIP veya Sistem Bütünlüğü Koruması , Windows anti-virüs gibi hissettiren bir tür gerçek zamanlı dosya koruması :) ve OS X sistem klasörlerinde yapmak istediğiniz değişiklikleri durduruyor. Apple, sistem değişikliklerini devre dışı bırakmaya karar verdi - SIP'in bizi koruduğu internet ve diğer bilgisayarla ilgili kötü güçlerden tamamen korunduğunuzdan emin olmak için .

Eğer isterseniz SIP devre dışı Eğer tutarak Kurtarma HD ön yükleme yapmalısınız Command + R Eğer Mac önyükleme olarak tuşlarına aynı anda.

Utilities menüsünden terminali açın ve yazın csrutil disable, sonra return tuşuna basın. Yeniden başlatmak için Apple Menüsüne gidin.

SIP bundan sonra devre dışı bırakılacak. Uzun zaman önce devre dışı bıraktım ve yanlış bir şey fark etmedim, bazı işlemler şikayet ediyor gibi gözüküyor, ancak her zaman OS X’te oluyorlar, bu nedenle Sistem Bütünlüğü’nün 'korunmasının' eksikliğinden kaynaklandığından emin değilim.

Tavsiyem SIP'den tamamen kurtulmak ve / veya tüm açık kaynak kodlu yazılım / geliştirme yazılımınız için homebrew kullanmak. Homebrew, taksit için / usr / local dizinini kullanır ve diğer sistem bileşenleri ile çakışmaz ve homebrew oluşturur, os x apple tarafından oluşturulandan daha günceldir.


1
Bu cevabı oy kullanmanın bir anlamı yok. Ama belki birileri sadece huysuzdur? Benden +1 ...
bmike

1
Teşekkürler dostum! Biraz mizah koymaya çalıştım, ama her biri benim anlayışıma
uymamalı

Hmm - kutsalın cevabını okuduktan sonra , bunun SIP olduğundan emin değilim. Düşünceler?
bmike

1
Bu aslında bir alt dizin olarak bir klasör (muhtemelen bir man sayfası gibi bir şey için) oluşturulmasını önleyen SIP'dir /System; 10.11 itibariyle limit dışı. Eğer bir çimdiksek, geçici olarak etkisiz hale getirmek için csrutil'i kullanabiliriz, bunun bir köstebek patlamasına dönüşebileceğini hissedebileceğimi biliyorum, ancak bu işe yaraması için iyi bir neden gibi görünmüyor. Bunu bırakmak ... neden güzel şeylere sahip olamıyoruz.
Sacrilicious

Her zaman kapattım: statusSystem Integrity Protection status: enabled (Custom Configuration). Configuration: Apple Internal: disabled Kext Signing: disabled Filesystem Protections: disabled Debugging Restrictions: disabled DTrace Restrictions: disabled NVRAM Protections: disabled ve sistemimi oldukça sıkı bir şekilde kapattığımda ve özelleştirdiğimden beri etkinleştirmek için bir nedenim yok
PJJ 9:15

4

Kullanılan pip3 install <package>yerine ve de izin sorununu çözdü pip.


4

İnan bana, kütüphanenin bu yolda bir şey yazmasını istemiyorsun.

Daha önce tavsiye edilmedi, ancak yazmak mümkündü /System/Library/Frameworks/Python.framework/Versions/2.7/, ancak şimdi Apple SIP nedeniyle desteklenmiyor ve bu nedenle kütüphane sahibi sorunu. Paket güncellemesi bu güncellemeyle doğru şekilde çalışacak şekilde yükseltilmelidir. Çoğu paket güncellendi ve içeriklerini yükledi /Library/Python/2.7/site-packages, ancak bazı paketler güncellenmedi.

Benim durumumda, .hdosyasını System Frameworks klasörüne yazmaya çalışan yeşil kitaplıktı :

Nasıl düzeltilir: sudo -H pip install greenlet --install-option "--install-headers=/Library/Python/2.7/lib/python/includes/" o zamansudo -H pip install gevent

Numpy için düzeltme yapıldı sudo -H pip install --ignore-installed -U numpy.

Diğer kütüphaneler için düzeltmeler https://github.com/pypa/pip/issues/3177 ile pip install --ignore-installed sixve arasında değişmektedir pip install --user(sonuncusu /User//Library/Python/2.7/ path içine her şeyi yükler). Ayrıca bu yazıya verilen en güncel cevaba bakınız: https://apple.stackexchange.com/a/210021/169157

Eğer yazarsanız python -m site, sys.path = [ ... '/Library/Python/2.7/site-packages', ... ] sistem yollarından önce içermesi gerekir - bu yüzden (ve nasıl) çalışır.


3

Aşağıdaki gibi yaptım:

brew install python

sonra python yüklendikten sonra:

sudo easy_install pip

3
brew install pythonzaten pip yüklüyor. Daha sonra boruyu easy_install aracılığıyla kurarsanız, kafa karıştırıcı sorunlara yol açabilecek iki boru tesisatıyla kurursunuz.
NSSynapse

3

Bu sorun için çok güzel bir çözüm, virtualenv (virtualenvwrapper) kullanıyor, projeniz için yeni bir ortam oluşturduktan sonra, pip'i sorunsuz kullanabilirsiniz, bu yüzden sanalenvwrapper kullandım ve bu iki satır sorunu çözdü:

mkproject <project_name>
pip install <package_name>

Virtualenv kurulumunu nasıl önerirsiniz? pip install virtualenvveya pip çalışmıyorsa, sudo easy_installburada daha önce olanlar için + 1'e başvurmanız gerekir . Şerefe
bmike

1
pip nedeniyle çalışma izni sorunu çalışmıyor, bu yüzden sudo easy_installişe yarıyor
neosergio

2

Orijinal python2.7 OSX ile birlikte gelirken, mac'umda python3 yüklü. Bu yüzden ne zaman python3'ü çağırmak istersem, ben sadece $ python3 yazarım.


2

özet

Bu problemi Mac OS X 10.11.6'da (ki SIP'ye sahip) çarptım çünkü System easy_install'ı kullanarak pip kurdum ve yerel easy-install.pth ise sistem kütüphanelerine atıfta bulundu.
Pip ile sonraki paketleri kurarken, bağımlılıkların bazıları eski System Python kütüphanelerine giderildi.
Çözüm, yerel olarak kurulu olan kütüphanelerimi kaldırmak ve yerel bir python sürümünü (pip içeren) https://www.python.org/downloads/ adresinden yeniden kurmaktı, böylece Sistem ve yerel olarak kurulan python örnekleri ayrı tutulacaktı.
Ben mfripp tarafından cevapta fix_mac_path.pth düzeltme kullanarak denedim ancak temizleyici kaldırarak ve yeniden buldum.

Sebeb olmak

(Bu adımları izlemeyin)

Ansible'ı yüklemeye çalışırken bu soruna çarptım. Pip üzerinden OS X üzerine kurulum için Ansible dokümanlarını
izledim İlk önce pip ile kurulum yaptım. sudo easy_install pip
Bu sistemde easy_install'ı kullandım /usr/bin/easy_installve pip /Library/Python/2.7/site-packages/pip
kurulumunda pip kurulumu sırasında aşağıdaki gibi uyarılar aldım ama onları görmezden geldim.

/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'python_requires'
  warnings.warn(msg)
warning: no previously-included files found matching '.coveragerc'
...
Adding pip 9.0.1 to easy-install.pth file
Installing pip script to /usr/local/bin
...
Installed /Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg
...
Finished processing dependencies for pip

Daha sonra baktığımızda /Library/Python/2.7/site-packages/easy-install.pth, buna benziyordu

import sys; sys.__plen = len(sys.path)
./pip-9.0.1-py2.7.egg
import sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:]; p=getattr(sys,'__egginsert',0); sys.path[p:p]=new; sys.__egginsert = p+len(new)

Sonra pip üzerinden ansible kurdum

sudo pip install ansible

Gereksinimlerin zaten sistem kütüphaneleri tarafından yerine getirildiğini söyleyen mesajlarım var

Requirement already satisfied: setuptools in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python (from ansible)  
Requirement already satisfied: six>=1.4.1 in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python (from cryptography>=1.1->paramiko->ansible)

Sonra çalışanı çalıştırırken bu sorunu çözdüm.

VersionConflict: (setuptools 1.1.6 (/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python), Requirement.parse('setuptools>=11.3'))

ve bir pip kontrol paramiko yeni bir setuptools gerekli olduğunu ortaya koydu

pip check paramiko
matplotlib 1.3.1 requires tornado, which is not installed.
matplotlib 1.3.1 requires nose, which is not installed.
cryptography 1.7.2 has requirement setuptools>=11.3, but you have setuptools 1.1.6.

Ansible'ın sadece gerekli kurulum araçlarını (sürüm yok) ve pip'in Sistem kurulum araçlarının sağladığı bağımlılığı bildirdiğini unutmayın.

Çözüm

Ben ima işlem kullanılarak herhangi bir yerel piton kütüphaneleri kaldırarak bunu çözüldü https://docs.python.org/2.7/using/mac.html#getting-and-installing-macpython
bana bu yer için

sudo rm -rf /Library/Python

Sonra / usr / local / bin dizinindeki sembolik bağlantıları ve çalıştırılabilir dosyaları kaldırdım.

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*

ve bunun gibi. Ayrıca tüm uygulamaları kaldırdım

sudo rm -rf /Applications/Python\ 2.7/

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

Bu, yerel bir piton ve pip monte /Library/Frameworks/Python.framework/Versions/2.7ve sembolik /usr/local/binsistem kütüphanelerinden ayrı olan /System/Library/Frameworks/Python.frameworkve /usr/bin bu yüzden almak

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

ve pip list

setuptools (28.8.0)
six (1.10.0)

şimdi ansible benim için çalışıyor


1

Benim PATHiçin pip, kayıp için gitmişti , bu koşarak doğrulandıpython -m pip

Burada iki potansiyel çözüm, pipgeri ekleyin PATH. Benim durumumda pipzaten güncel değildi, bu yüzden yükseltme düzeltti:

python -m pip install --upgrade pip

✗ pip --version pip 9.0.1 from /Library/Python/2.7/site-packages (python 2.7)

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.