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:
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'
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 .
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.
- 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-packages
ve /usr/local/bin
bu 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:
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 -S
her 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-packages
ve ilgili komut dosyalarını kaldırmak için muhtemelen bu şansı kullanmalısınız /usr/local/bin
.
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.py
bu 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 -r
yakı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 .pth
dosyalardı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/.../Extras
istenirse arama yolundan çıkar.
fix_mac_path.pth
Aş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.pth
yukarı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.pth
yukarı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>