OS X El Capitan अपग्रेड के बाद पाइप का उपयोग कैसे करें?


116

एल कैपिटन अपडेट के बाद, मैं पाइप इंस्टॉल चलाने में असमर्थ हूं। त्रुटि मुझे यह है कि "ऑपरेशन की अनुमति नहीं है" जब पाइप स्थापित करते समय नए फ़ोल्डर बनाने की कोशिश करता है।

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

वास्तव में, सामान्य तौर पर मैं इन फ़ोल्डरों में फ़ोल्डर आदि नहीं बना सकता। सूडो का उपयोग करने की कोशिश की है जो मदद नहीं करता है। इसके अलावा मैंने किया है

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

ऊपर भी मदद नहीं की। मैं अजगर पुस्तकालयों को फिर से सुचारू रूप से स्थापित करने में सक्षम होने के लिए क्या कर सकता हूं?


1
आपके सिस्टम में पाइप कहां है?
user151019

$ जहां पाइप / usr / स्थानीय / बिन / पाइप
web_ninja

$ पाइप
विचलन

आपने पाइप कैसे स्थापित किया - इसे /Library/Python/2.7/site-packages not / System
user151019

मुझे अब याद नहीं है। मुझे यह टिप्पणी करने के बाद लगा कि समस्या थी और अजगर को स्थापित करने के लिए काढ़ा का उपयोग किया और इससे पाइप का स्थान सही हो गया।
web_ninja

जवाबों:


84

एक त्वरित समाधान होमब्रे का उपयोग करने के लिए pythonहै /usr/local/binताकि आपके pipउपयोगकर्ता-परिवर्तनीय अजगर ढांचे के खिलाफ चल सकें।

brew install python
pip --version

सिस्टम इंटिग्रिटी प्रोटेक्शन को डिसेबल करना भी एक विकल्प है, लेकिन मैं आपको कुछ भी नहीं बल्कि पेशेवर रूप से प्रबंधित और फायर वॉलड सर्वर के लिए सलाह देता हूं, जहां आपके पास घुसपैठ का पता लगाने के लिए मैनपावर है या यदि आप एक डेवलपर / sysadmin हैं और इसके साथ और बिना चीजों का परीक्षण करने की आवश्यकता है एसआईपी।

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

आप देखेंगे कि प्रतिबंधित ध्वज सेट है जिसे एसआईपी लगे रहने के बावजूद भी जड़ से नहीं हटाया जा सकता है।

होमब्रे का उपयोग करना सिस्टम प्रदान किए गए संस्करण की तुलना में अलग से पाइप और अजगर का प्रबंधन करना संभव बनाता है। एक बोनस के रूप में, होमब्रेव ढांचे को स्वचालन के माध्यम से रखरखाव और पैच / कोर को कम करने के लिए डिज़ाइन किया गया है।


1
काढ़ा स्थापित अजगर स्थिर नहीं है और यह बेतरतीब ढंग से दुर्घटनाग्रस्त हो जाता है
jayatubi

@ Ajatubi आपके लिए कौन सा पैकेज या स्क्रिप्ट अस्थिर है? क्या आप काढ़ा या अजगर 3 से अजगर 2.7.10 स्थापित कर रहे हैं जो सिर्फ एक बड़ी टक्कर मिला है और इतना पिछड़ा नहीं होने के लिए जाना जाता है। आप दर्जनों संस्करणों में से चयन कर सकते हैं यदि आप अपनी जरूरतों के लिए कम या ज्यादा स्थिर पसंद करते हैं।
bmike

1
सहमत हैं कि brew install pythonसबसे आसान विकल्प है, हालांकि कुछ अन्य सेटअप की सफाई की आवश्यकता हो सकती है यदि आप सिस्टम पायथन का उपयोग कुछ समय के लिए कर रहे हैं (जैसे रूट-स्वामित्व वाले पायथन फ़ाइलों के तहत /usr/local/binऔर ~/Library/Caches/pip)
RichVel

एक संकलित अजगर को .pkg से डाउनलोड करना python.org/downloads/release/python-2712 मेरे लिए ठीक काम करता है, 10.8 पर। उस बनाम homebrew पर कोई टिप्पणी? धन्यवाद
डेविस

@ मुझे पसंद है brewक्योंकि आपके द्वारा पसंद किए गए संस्करण को पिन करना आसान है - कई अलग-अलग संस्करणों का प्रबंधन करें या चीजों को नियमित रूप से अपडेट रखें। यदि आपके पास कुछ है जो आपके लिए काम करता है, हालांकि - यह तर्क करना मुश्किल है कि आपको कुछ भी बदलना चाहिए।
bmike

77

एसआईपी को निष्क्रिय करने या अन्य पायथन संस्करणों को स्थापित करने की आवश्यकता के बिना एक अन्य व्यवहार्य विकल्प, केवल वर्तमान उपयोगकर्ता का उपयोग करने के लिए मॉड्यूल स्थापित करना है

pip install --user <modulename>

यदि यह सिर्फ आपकी व्यक्तिगत मशीन है, तो यह सबसे सरल और सबसे सुरक्षित समाधान होगा।


1
हो सकता है कि एल कैपिटन ने हमें प्रदान किया / usr / bin / pip, लेकिन macOS सिएरा नहीं करता है।
सिगाजिस


57

यह समस्या अक्सर तब उत्पन्न होती है जब पाइप एल कैपिटन पर आईपीथॉन के लिए एक मैनपेज स्थापित करने की कोशिश करता है। इस तरह एक पाइप कमांड का उपयोग करने के लिए त्वरित फिक्स है:

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

हालांकि, एल कैपिटान पर सिस्टम इंटीग्रिटी प्रोटेक्शन प्रोटेक्शन (एसआईपी) पाइप के साथ कई बुरी प्रथाओं को ब्लॉक करता है, जो कि स्लाइड द्वारा उपयोग किया जाता है, इसलिए आपको एल कैपिटान पर पाइप को आसानी से चलाने के लिए कुछ और बदलाव करने की आवश्यकता होगी।

एल कैपिटन पर एसआईपी ओएस एक्स पर पायथन के ऐप्पल द्वारा आपूर्ति किए गए संस्करण के साथ पाइप का उपयोग करने के साथ तीन समस्याओं को उजागर करता है:

  1. डिस्टिल्स मैक पर दो महत्वपूर्ण चर को सही ढंग से सेट नहीं करता है, इसलिए पाइप हेडर और अन्य साझा की गई फ़ाइलों (जैसे, मैनपेज़) के तहत लिखने की कोशिश करता है /System/Library/Frameworks/Python.framework/Versions/2.7/। यह एक बुरा विचार है, लेकिन ओएस एक्स के पुराने संस्करणों में, यह सफल रहा कि क्या पाइप को सूडो के साथ चलाया गया था। हालांकि यह एसआईपी के कारण एल कैपिटन पर विफल रहता है। यह वह त्रुटि है जिसे आपने चलाया था। यह जैसे संदेश देता हैOSError: [Errno: 1] Operation not permitted: '/System/Library/Frameworks/Python.framework/Versions/2.7/share'

  2. Apple कुछ पैकेजों के पुराने संस्करणों को स्थापित करता है /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/(जैसे, छह)। ओएस एक्स के पिछले संस्करणों पर, जब आपने एक पैकेज स्थापित किया था, जिसमें से किसी एक के नए संस्करण की आवश्यकता थी, sudo pipतो चुपचाप पुराने संस्करण को /System/फ़ोल्डर से हटा दें और एक नया संस्करण स्थापित करें /Library/Python/2.7/site-packages। यह भी एक बुरा विचार था, और अब एसआईपी के साथ संभव नहीं है। लेकिन अब पुराने पैकेज को हटाने की कोशिश करते समय एक त्रुटि संदेश के साथ पाइप क्रैश हो जाएगा। वह संदेश भी है OSError: [Errno: 1], लेकिन यह एक संदेश की तरह आता है Uninstalling six-1.4.1:। देखें, उदाहरण के लिए, https://github.com/pypa/pip/issues/3165

  3. पायथन का ऐप्पल संस्करण मानक उपयोगकर्ता-सुलभ पैकेज स्थापना स्थानों के ऊपर/System/Library/Frameworks/Python.framework/Versions/2.7/ अजगर खोज पथ के तहत कई निर्देशिकाओं को जोड़ता है । इसलिए यदि आप एक पैकेज का नया संस्करण कहीं और स्थापित करते हैं (उदाहरण के लिए, ), तो आपको एक संदेश मिलेगा कि स्थापना सफल हुई, लेकिन तब जब आप अजगर चलाते हैं तो आपको पुराने संस्करण से मिलेगा । इससे नए पैकेजों का उपयोग करना भी असंभव हो जाता है जिनका मानक पुस्तकालय से मॉड्यूल के समान नाम है।sudo -H pip install --ignore-installed six/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/

आप इन मुद्दों पर काम कर सकते हैं, लेकिन यह विधि आपके तीन प्रश्नों के उत्तर पर निर्भर करती है।

  1. क्या आप पायथन के मैक ओएस एक्स संस्करण का उपयोग जारी रखना चाहते हैं या अपना खुद का इंस्टॉल करना चाहते हैं? अपने आप को स्थापित करना सबसे सुरक्षित विकल्प है, और आधिकारिक पायथन इंस्टॉलर, होमब्रे या एनाकोंडा के माध्यम से किया जा सकता है। यह भी वही है जो Apple अनुशंसा करता है , जैसा कि @Sacrilicious ने बताया है । यदि आप अपने स्वयं के संस्करण पायथन को स्थापित करते हैं, तो आपको संभवतः वर्तमान में स्थापित /Library/Python/2.7/site-packagesकिसी भी स्क्रिप्ट को अनइंस्टॉल करना चाहिए और /usr/local/binउन पैकेजों (पाइप सहित) के लिए स्थापित की गई कोई भी स्क्रिप्ट । अन्यथा आपको पायथन के सिस्टम-इंस्टॉल किए गए संस्करण तक पहुंचने वाली कुछ लिपियों और कुछ स्वयं की स्थापना तक पहुंचने का कष्टप्रद अनुभव होगा।

यदि आप सिस्टम-स्थापित पायथन के साथ रहना चाहते हैं, तो आपको दो और निर्णय लेने होंगे:

  1. क्या आप सभी उपयोगकर्ताओं के लिए, या सिर्फ अपने लिए पैकेज स्थापित करना चाहते हैं? सभी उपयोगकर्ताओं के लिए इंस्टॉल करना सुनिश्चित करता है कि पायथन (संभवतः प्रशासनिक स्क्रिप्ट सहित) का उपयोग करने वाले प्रत्येक प्रोग्राम में आपके द्वारा इंस्टॉल किए गए सभी पैकेजों तक पहुंच होगी। हालांकि, एक दूर का मौका है कि यह एल कैपिटन के अजगर के खुद के उपयोग में हस्तक्षेप करेगा। (मुझे आशा है कि Apple python -Sयह सुनिश्चित करने के लिए उपयोग करता है कि वे हमेशा उन पैकेजों को प्राप्त करें जिनकी वे अपेक्षा करते हैं, लेकिन मेरे पास इसका परीक्षण करने का कोई तरीका नहीं है।) सिर्फ अपने स्वयं के उपयोगकर्ता खाते के लिए इंस्टॉल करना सिस्टम पायथन इंस्टॉलेशन के साथ हस्तक्षेप करने की संभावना को समाप्त करता है। नोट: यदि आप सिस्टम-वाइड इंस्टॉलेशन से यूजर-ओनली में स्विच करने जा रहे हैं, तो आपको संभवतः इस बात का मौका लेना चाहिए कि वर्तमान में स्थापित /Library/Python/2.7/site-packagesऔर संबंधित स्क्रिप्ट में कुछ भी अनइंस्टॉल कर दिया जाए /usr/local/bin

  2. क्या आप उन अतिरिक्त पैकेजों को छिपाना चाहते हैं जो पायथन के ओएस एक्स संस्करण (अंडर /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/) के साथ इंस्टॉल किए गए हैं , या उन्हें खोज पथ में रखना है? मैं उन्हें छिपाने की सलाह देता हूं, ताकि जरूरत पड़ने पर इन पैकेजों के नवीनतम संस्करण स्वचालित रूप से उपयोगकर्ता-सुलभ स्थानों में स्थापित हो जाएं। यदि आप इस निर्देशिका को नहीं छिपाते हैं, तो आपको कभी-कभी ऐसे संदेश मिलेंगे कि पाइप एक मौजूदा पैकेज को बाद के संस्करण में अपग्रेड करने के लिए (जिसे आप स्थापित कर रहे हैं एक अलग पैकेज द्वारा आवश्यक) को हटाने में असमर्थ थे। उस स्थिति में, आपको चलाने की आवश्यकता होगी pip install --ignore-installed <package>, जो नए संस्करण को स्थापित करेगा और सिस्टम-इंस्टॉल किए गए संस्करण को छिपाएगा। हालांकि, अगर आप पूरा छिपाते हैं/System/.../Extras/...निर्देशिका, आप कुछ ऐप्पल पैकेजों तक पहुंच खो देंगे जो कि पाइप, यानी, कोरग्राफिक्स और बोनजॉर के माध्यम से उपलब्ध नहीं हैं। (यदि आपको इनकी आवश्यकता है, तो आप इन्हें अपनी साइट-संकुल निर्देशिका में समरूपता प्राप्त कर सकते हैं।)

अब, यहाँ workarounds हैं। ऑपरेटिंग सिस्टम द्वारा उपयोग किए जाने वाले पायथन पैकेज को गलती से बदलने या हटाने से बचने के लिए, ओएस एक्स के सभी संस्करणों पर अच्छा अभ्यास होगा; हालाँकि, यदि आप OS X El Capitan (10.11) पर Python के Apple द्वारा प्रदत्त संस्करण के साथ उपयोगकर्ता-संस्थापित संकुल का उपयोग करना चाहते हैं तो वे आवश्यक हैं।

पाइप स्थापित करें

आपने शायद ऐसा पहले ही कर लिया है, लेकिन यदि नहीं, तो आप सभी उपयोगकर्ताओं के लिए पाइप स्थापित करने के लिए निम्न कमांड का उपयोग कर सकते हैं :

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

या केवल अपने स्वयं के उपयोगकर्ता खाते के लिए पाइप स्थापित करने के लिए इस कमांड का उपयोग करें :

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

साझा फ़ाइल स्थान प्रबंधित करें

यदि आप सभी उपयोगकर्ताओं के लिए पैकेज स्थापित कर रहे हैं, तो इन पंक्तियों के साथ .pydistutils.cfg नामक एक फ़ाइल बनाएं ( https://github.com/pypa/pip/issues/426 से ):

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

यदि आप आमतौर पर उपयोग करते हैं sudo -H pip ..., तो आपको यह फ़ाइल /var/root(रूट उपयोगकर्ता के लिए होम निर्देशिका) में डालनी चाहिए। यदि आप आमतौर पर उपयोग करते हैं sudo pip ..., तो आपको इस फ़ाइल को अपने घर निर्देशिका (~) में रखना चाहिए।

ये सेटिंग्स पाइप को हेडर और मैनपेज़ जैसे साझा किए गए आइटम को लिखने की कोशिश करने से रोकेंगी /Library/System। (इस उत्तर के शीर्ष पर स्थित कमांड एक ही चीज़ का एक तेज़ संस्करण है।) इन सेटिंग्स की आवश्यकता है क्योंकि डार्विन-विशिष्ट कोड /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/command/install.pyइन वेरिएबल्स को रूट-राइट करने योग्य स्थानों पर सेट करने में विफल रहता है (हालांकि यह अन्य चर को सही ढंग से सेट करता है)। इस बारे में https://github.com/pypa/pip/issues/3177 पर अधिक जानकारी है ।

यदि आप केवल अपने स्वयं के उपयोगकर्ता खाते के लिए पैकेज स्थापित करते हैं, तो साझा किए गए आइटम स्वचालित रूप से इंस्टॉल किए जाएंगे ~/Library/Python/2.7/। लेकिन आपको अपनी ~ / .profile में निम्न पंक्तियों को जोड़ना चाहिए ताकि जब आपको उनकी आवश्यकता हो तो साझा किए गए आइटम मिल जाएंगे:

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

नोट: आपको परिवर्तनों को प्रभावी करने के लिए कमांड लाइन पर एक नया शेल शुरू करने या चलाने की आवश्यकता होगी। hash -rयदि आप हाल ही में पुराने स्क्रिप्ट को रास्ते से हटा चुके हैं, तो आप चलाना चाह सकते हैं ।

अजगर पथ का प्रबंधन करें

आपको यह सुनिश्चित करने की आवश्यकता होगी कि आपके द्वारा इंस्टॉल किए गए पैकेज सिस्टम-स्थापित पैकेजों की तुलना में पायथन के खोज क्रम में अधिक हैं। ऐसा करने का सबसे आसान तरीका .pthफाइलों के साथ है। यह इस पृष्ठ पर अन्यत्र @ Sacrilicious के सुझाव का अनुसरण करता है, लेकिन यह सुनिश्चित करता है कि आपके सिस्टम-वाइड साइट-पैकेज निर्देशिका से पहले आपके उपयोगकर्ता साइट-संकुल निर्देशिका को खोजा जाता है, और दोनों को मानक पुस्तकालय और Apple के अतिरिक्त निर्देशिका (दोनों के तहत / सिस्टम /) से पहले खोजा जाता है। ..)। /System/.../Extrasयदि वांछित है तो यह खोज पथ से भी दूर है।

fix_mac_path.pthनीचे दी गई पाठ के साथ नामक एक फ़ाइल बनाएँ । यदि आप सभी उपयोगकर्ताओं के लिए पैकेज स्थापित कर रहे हैं, fix_mac_path.pth तो इसे रखा जाना चाहिए /Library/Python/2.7/site-packagesयदि आप केवल अपने स्वयं के उपयोगकर्ता के लिए स्थापित कर रहे हैं, तो fix_mac_path.pth ~ / लाइब्रेरी / पायथन / 2.7 / lib / python / साइट-संकुल में होना चाहिए। (इस फ़ाइल का कोई भी नाम हो सकता है जिसे आप चाहते हैं, लेकिन इसे इन दोनों स्थानों में से एक या दोनों स्थानों पर रखना होगा, और इसे समाप्त करना होगा .pth; साथ ही, इस फ़ाइल के सभी पाठ एक पंक्ति में होने चाहिए।)

यदि आप Apple में स्थापित संकुल को छिपाना चाहते हैं /System/.../Extras:

Apple-आपूर्ति किए गए संस्करण से स्वतंत्र पाइप / सेप्टुल्फूल की एक कार्यशील प्रतिलिपि प्राप्त करने के लिए पहले निम्न कमांड में से एक को चलाएं:

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

फिर fix_mac_path.pthऊपर दिए गए स्थान पर निम्न कोड डालें:

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 स्थापित पैकेजों का उपयोग करते रहना चाहते हैं, तो आपको सेटप्टूल की एक और प्रति स्थापित करने की आवश्यकता नहीं है। बस fix_mac_path.pthऊपर दिए गए स्थान पर निम्नलिखित कोड डालें:

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

इसके बाद, आप python -m siteयह सुनिश्चित करने के लिए उपयोग कर सकते हैं कि पथ खोज क्रम समझ में आता है।

पैकेज स्थापित करें

इसके बाद, आपको निम्नलिखित में से किसी एक कमांड का उपयोग करके नए पैकेज स्थापित करने में सक्षम होना चाहिए।

सभी उपयोगकर्ताओ के लिए:

sudo -H pip install <package>

अपने स्वयं के उपयोगकर्ता के लिए:

pip install --user <package>

विकल्पों के साथ बहुत स्पष्ट दिशा-निर्देश दिए गए। मैंने इस गाइड का पालन किया और सफलतापूर्वक "छह" लाइब्रेरी की समस्या को दूर करने में सक्षम था, जिससे मुझे माइटप्रॉक्सी स्थापित करने की अनुमति मिली।
पॉल चेरोच

1
यह वास्तव में सबसे अधिक जानकारीपूर्ण, पूर्ण, और सहायक जवाबों में से एक है जिसका मैंने कभी स्टैकओवरफ्लो पर सामना किया है। शाबाश, और धन्यवाद।
cmsjr

@cmsjr, धन्यवाद! मुझे यह पता लगाने में थोड़ा समय लगा कि क्या चल रहा है, और इससे मुझे इसे वापस संदर्भित करने के लिए एक अच्छी जगह मिल गई है!
Matthias Fripp

4
अब तक मैंने इस क्षेत्र के सबसे स्पष्ट और सबसे पूर्ण विवरण को देखा है, विशेष रूप से मौजूदा सिस्टम पायथन मेस की सफाई - धन्यवाद! मेरा मुख्य सुधार अधिक दृढ़ता से एक काढ़ा-पायथन का उपयोग करने की सिफारिश करेगा, क्योंकि यह बहुत आसान है और एक साफ सेटअप प्रदान करता है जिसमें सुडो की आवश्यकता नहीं होती है। यह विकास परियोजनाओं के लिए virtualenvs के अतिरिक्त है।
रिचवेल

क्या आपदा। भगवान आपका भला करे।
मैट एम।

31

सबसे पहले, आप SIP को समस्या को संबोधित करने के तरीके के रूप में अक्षम नहीं कर रहे हैं। क्षमा करें कि यही कारण है कि यह फ़ोल्डर निर्माण विफल हो रहा है, लेकिन हमें इसके चारों ओर काम करना होगा। दूसरा, आप सभी बारीकियों को खो देते हैं Apple ने सोचा कि वे आपको दे रहे थे, जैसे कि pyObjC के माध्यम से एक पुल, जब आप अपना खुद का पायथन स्थापित करते हैं।
(मैं मानता हूँ, वे कहते हैं कि/usr/local यदि आप एक डेवलपर हैं, तो आपको अपना खुद का स्थापित करना चाहिए , मुझे सिर्फ इसे काढ़ा बनाने का आसान तरीका है ।)

तार्किक रूप से, आप इसे कहीं न कहीं स्थापित करने के बारे में सोचेंगे SIP आपको रोक नहीं रहा है, और यह लगभग निश्चित रूप से कुछ निर्भरता पाइप आपके लिए हल कर रहा है। पाइप जहाँ आप इसे स्थापित करने के लिए कहना चाहते हैं, यह उतना उपाय नहीं है, जितना कि यह पहले से मौजूद सामान / सिस्टम को अनदेखा करता है, जहाँ यह कई सामान्य इंस्टॉलों के लिए निर्भरता की जाँच करेगा, जैसे कि six, और SIP पाइप का कारण बनता है अपने आप को तोड़ने के लिए जब यह कोशिश करता है और इसे अपग्रेड करता है। यह वास्तव में /Library/Python/2.7/site-packages को स्थापित करने के लिए पाइप का डिफ़ॉल्ट व्यवहार है, आपको केवल --ignore-installedयह निर्भरता के किसी भी अद्यतन संस्करण को स्थापित करने के लिए इसे कहने के लिए कहने की आवश्यकता है ।
... दुर्भाग्य से, आप तब इस मॉड्यूल को एक इंटरैक्टिव सत्र या स्क्रिप्ट में आयात कर सकते हैं और अच्छी वसा विफलता प्राप्त कर सकते हैं - यह अभी भी / सिस्टम के अन-अपग्रेडेड पैकेज को देख रहा है!

शुरुआती सेटपूल दिनों के बाद से, पायथन के पास उस लुकअप को स्पष्ट करने का एक तरीका है। यह थोड़ा अजीब लग, (और हम में से जो लोग सुरक्षा के प्रति सजग और जाँच के बिना सूची के शीर्ष पर यह धकेल की मंदबुद्धि के बारे में रोमांचित नहीं कर रहे हैं करने के लिए ठहराव प्रकाश में लाना चाहिए, लेकिन) यदि आप एक फ़ाइल है कि साथ समाप्त होता है जगह कर सकते हैं .pth( /Library/Python/2.7/site-packagesनिम्न सामग्री के साथ लुकअप ऑर्डर के सामने उस निर्देशिका को धकेलने के लिए 'elcap.pth') :
import sys; sys.path = ['/Library/Python/2.7/site-packages'] + sys.path

एक नया सत्र शुरू करें, और एक त्वरित यात्रा इस बात python -m siteकी पुष्टि करेगी कि आपने उस रास्ते को पहले स्लॉट में डाला है, और आयात मॉड्यूल काम करना चाहिए।

ओह, और इस सब के बाद, बस पाइप के --userविकल्प के साथ स्थापित करने का प्रयास करें , या एक वर्चुअनव का उपयोग करें - वैसे भी अधिकांश लोगों के लिए सबसे अच्छा अभ्यास है।


1
अब यह मेरे सरलीकृत "सिस्टम पायथन को त्यागें और इसे काढ़ा करें" समाधान के लिए एक अच्छा और एक अच्छा काउंटरपॉइंट है। यदि आपको त्वरित और गंदे की आवश्यकता है, तो यह प्रयास के लायक नहीं हो सकता है, लेकिन pyObjC और एक अजगर को रखने के लिए योग्यता है।
bmike

2
अधिक पायथोनिक और समझदार --userएक virtualenv के रूप में स्थापित या उपयोग करने के लिए होगा । मैं सिर्फ दिमाग का हूँ, एक sysadmin के रूप में, कि आप सिस्टम के लिए एक बार इंस्टॉल करते हैं, और यह कि उपयोगकर्ता सिस्टम को ओवरराइड करने में सक्षम होना चाहिए। इस समाधान पर आपत्तियां यह हो सकती हैं कि सिस्टम एक परिवर्तित मार्ग को देख रहा होगा, लेकिन एक मिसाल है कि easy_install एक .pth फ़ाइल भी लिख सकता है।
त्रिक

2
मुझे नहीं पता कि अगर ब्रू का तरीका आसान / गलत तरीका है - यह समस्याओं को हल करने का मामला है, और ब्रू मेरी समस्याओं को शानदार ढंग से हल कर रहा है - अकेले सोच रहा है कि नए खिलौने (रूबी 2.2) के साथ खेलने के लिए कितना प्रयास करना होगा .3, python3.5, MongoDB, Node4.2.1) एक आश्वस्त तरीके से, जैसे कि एक कमांड टाइप करना और यह recompiles, अपडेट करता है और थ्रैश को बाहर ले जाता है - अच्छी तरह से, इसलिए मैं आसान रास्ता लेता हूं :) मैं ऐसा नहीं करता पायथन का शिप किया गया OS X संस्करण कोको और थ्रेड्स के समर्थन से बहुत अलग है और बहुत सारे पैकेज जो मैंने पहले कभी इस्तेमाल नहीं किए थे और मैंने वास्तव में Xcode / कर्नेल सामान के अपने ढेर को संकलित किया
PJJ

मैंने elcap.pth को /Library/Python/2.7/site-packages में जोड़ा, अब मैं उस पथ को sys.path के 0 और 2 सूचकांकों में सूचीबद्ध देखता हूं। तब मैंने कोशिश की sudo pip install --ignore-installed ipythonऔर यह तब तक चलता रहा जब तक "रनिंग सेटअपफ्रेम पीएक्सएक्सपेक्ट के लिए इंस्टॉल नहीं हुआ", जिस बिंदु पर पाइप अभी भी /System/Library/Frameworks/Python.framework/Versions/2.7/share में कुछ अपग्रेड करने की कोशिश करता है, और गलतियाँ करता है।
कोजिरो

Virtualenv को इंस्टॉल करने के लिए पाइप का उपयोग करने की आवश्यकता होती है, ताकि वास्तव में पाइप के उपयोग से संबंधित किसी भी समस्या का समाधान न हो। जैसा कि यह है, मैं इसे स्थापित कर रहा हूं pip --userऔर virtualenv अभी भी काम नहीं कर रहा है।
user5359531

4

मुझे लगता है कि इसकी वजह SIP या सिस्टम इंटीग्रिटी प्रोटेक्शन है , एक तरह का रियल-टाइम फाइल प्रोटेक्शन जो विंडोज़ एंटी-वायरस की तरह लगता है :) और OS X सिस्टम फोल्डर में आपके द्वारा किए जाने वाले किसी भी बदलाव को रोक देता है। Apple ने सिर्फ़ सिस्टम संशोधनों को अक्षम करने का निर्णय लिया - यह सुनिश्चित करने के लिए कि आप पूरी तरह से इंटरनेट की बुराई से सुरक्षित हैं और अन्य कंप्यूटर से संबंधित बुरी ताकतें SIP से हमारी रक्षा कर रही हैं।

यदि आप SIP को निष्क्रिय करना चाहते हैं तो आपको अपने मैक को बूट करने के साथ कमांड + R कीज़ को एक साथ रिकवरी एचडी में बूट करना होगा।

यूटिलिटीज मेनू से टर्मिनल खोलें, और टाइप करें csrutil disable, फिर रिटर्न दबाएँ। रिबूट करने के लिए Apple मेनू पर जाएं।

SIP अभी से अक्षम हो जाएगा। मैंने इसे बहुत पहले अक्षम कर दिया था और कुछ भी गलत नहीं देखा था, कुछ प्रक्रियाएं शिकायत करने लगती हैं, लेकिन वे हमेशा ओएस एक्स पर करते हैं इसलिए मुझे यकीन नहीं है कि यह सिस्टम इंटीग्रिटी 'सुरक्षा' की कमी के कारण है

मेरा टिप पूरी तरह से एसआईपी से छुटकारा पाने और / या अपने सभी ओपनसोर्स / डेवलपमेंट सॉफ़्टवेयर के लिए होमब्रे का उपयोग करने के लिए है। Homebrew किश्त के लिए / usr / स्थानीय निर्देशिका का उपयोग करता है और अन्य सिस्टम घटकों के साथ नहीं टकरा रहा है, और homebrew बिल्ड अधिक अप-टू-डेट हैं तो ओएस एक्स ऐप्पल बनाता है।


1
इस जवाब को वोट देने का कोई मतलब नहीं है। लेकिन, शायद कोई सिर्फ सनकी है? +1 मुझ से ...
bmike

1
धन्यवाद दोस्त! कुछ हास्य रखने की कोशिश की, लेकिन मेरी समझ के साथ हर एक को गठबंधन नहीं किया जाना चाहिए;)
PJJ

हम्म - पवित्र ' जवाब पढ़ने के बाद , मुझे यकीन नहीं है कि यह एसआईपी है। विचार?
bmike

1
यह वास्तव में SIP एक फ़ोल्डर के निर्माण को रोक रहा है (संभवतः एक आदमी पृष्ठ की तरह कुछ के लिए) की उपनिर्देशिका के रूप में /System; 10.11 तक ऑफ-लिमिट्स। अगर हम एक चुटकी में हैं, तो हम इसे अस्थायी रूप से अक्षम करने के लिए csrutil का उपयोग कर सकते हैं, हालांकि मुझे पता है कि ऐसा महसूस हो सकता है कि यह अजीब-ए-मोल में बदल सकता है, लेकिन यह इसे नियोजित करने के लिए एक अच्छा कारण नहीं लगता है। इसे छोड़ना है ... क्यों हम अच्छी बातें नहीं कर सकते।
त्रिक

मैंने इसे हर समय बंद कर दिया: 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 और इसे सक्षम करने का कोई कारण नहीं है क्योंकि मैंने अपने सिस्टम को बहुत तंग और अनुकूलित किया है
PJJ

4

के pip3 install <package>बजाय इस्तेमाल किया और में अनुमति की समस्या को हल किया pip


4

मेरा विश्वास करो, तुम सच में नहीं चाहते कि पुस्तकालय उस रास्ते पर कुछ भी लिखे।

यह पहले अनुशंसित नहीं था, लेकिन इसमें लिखना संभव है /System/Library/Frameworks/Python.framework/Versions/2.7/, लेकिन अब यह ऐप्पल एसआईपी के कारण समर्थित नहीं है और इसलिए यह पुस्तकालय के मालिक की समस्या है। इस अद्यतन के साथ सही ढंग से काम करने के लिए पैकेज वितरण को अपग्रेड किया जाना चाहिए। अधिकांश पैकेज अपडेट किए गए थे और अपनी सामग्री को इनस्टॉल करने के लिए /Library/Python/2.7/site-packages, लेकिन कुछ पैकेज अपडेट नहीं हुए थे।

मेरे मामले में, यह हरे रंग की लाइब्रेरी थी जो .hसिस्टम फ्रेमवर्क फ़ोल्डर में अपनी फ़ाइल लिखने की कोशिश कर रही थी :

इसे कैसे ठीक करें: sudo -H pip install greenlet --install-option "--install-headers=/Library/Python/2.7/lib/python/includes/" फिरsudo -H pip install gevent

सुन्न के लिए, ठीक है sudo -H pip install --ignore-installed -U numpy

अन्य पुस्तकालयों के लिए, फिक्स https://github.com/pypa/pip/issues/3177 से ( pip install --ignore-installed sixऔर pip install --userअंतिम सब कुछ /User//Library/Python/2.7/ पथ में स्थापित करता है) से भिन्न होता है । इस पोस्ट का वर्तमान शीर्ष उत्तर भी देखें: https://apple.stackexchange.com/a/210021/169157

यदि आप टाइप python -m siteकरते हैं तो sys.path = [ ... '/Library/Python/2.7/site-packages', ... ] सिस्टम पथ से पहले इसे शामिल करना चाहिए - यही कारण है कि (और कैसे) यह काम करता है।


3

मैंने इसे इस प्रकार किया:

brew install python

फिर अजगर स्थापित होने के बाद:

sudo easy_install pip

3
brew install pythonपहले से ही इसके साथ पाइप स्थापित करता है। यदि आप पाइप को easy_install के माध्यम से स्थापित करते हैं, तो आप संभवतः पाइप की दो स्थापनाओं के साथ हवा करते हैं जो भ्रामक समस्याएं पैदा कर सकती हैं।
NSSynapse

3

इस समस्या का एक बहुत अच्छा समाधान वर्चुअन (virtualenvwrapper) का उपयोग कर रहा है, जब आप अपनी परियोजना के लिए एक नया वातावरण बनाते हैं, तो आप बिना किसी समस्या के पाइप का उपयोग कर सकते हैं, इसलिए मैंने virtualenvwrapper का उपयोग किया है और ये दो लाइनें समस्या को ठीक करती हैं:

mkproject <project_name>
pip install <package_name>

आप virtualenv कैसे स्थापित करने की सलाह देते हैं? pip install virtualenvया पाइप कार्य नहीं कर रहा है और आपको sudo easy_installपहले से ही यहां के लिए +1 का सहारा लेना होगा । चीयर्स
bmike

1
पाइप अनुमत अनुमतियों के मुद्दे पर काम नहीं कर रहा है, इसलिए sudo easy_installकाम करता है
neosergio

2

मेरे पास मेरे मैक पर python3 स्थापित है जबकि मूल python2.7 OSX के साथ आता है। इसलिए जब भी मैं python3 को इनवाइट करना चाहता हूं, तो मैं $ python3 टाइप करता हूं .... शायद आपको $ python3 get-pip.py की कोशिश करनी चाहिए, यह मेरे लिए तब काम करता है जब मुझे आपके साथ लगभग यही समस्या है।


2

सारांश

मैंने मैक ओएस एक्स 10.11.6 (जिसमें एसआईपी है) पर इस समस्या को मारा क्योंकि मैंने सिस्टम easy_install का उपयोग करके पाइप स्थापित किया है, और सिस्टम पुस्तकालयों को संदर्भित स्थानीय easy-install.pth।
पाइप के साथ बाद के पैकेज स्थापित करते समय कुछ निर्भरताएं पुराने सिस्टम पायथन पुस्तकालयों के लिए हल हो गई थीं।
समाधान यह था कि मेरे स्थानीय रूप से स्थापित पुस्तकालयों को हटा दिया जाए और https://www.python.org/downloads/ से एक स्थानीय अजगर संस्करण (जिसमें पाइप शामिल हो) को फिर से स्थापित किया जाए ताकि सिस्टम और स्थानीय रूप से स्थापित अजगर उदाहरणों को अलग रखा जाए।
मैंने @mfripp द्वारा उत्तर में fix_mac_path.pth फिक्स का उपयोग करने की कोशिश की थी, हालांकि मुझे क्लीनर को हटाने और पुन: स्थापित करने का पता चला।

कारण

(इन चरणों का पालन न करें)

मैंने इस समस्या को हिट किया, जबकि एन्सिबल को स्थापित करने की कोशिश की। मैंने पाइप के माध्यम से OS X पर इंस्टॉलेशन के लिए Ansible डॉक्स का अनुसरण किया।
पहले मैंने पाइप को इनस्टॉल sudo easy_install pip
किया, इसके साथ सिस्टम को उपयोग करने में easy_install का उपयोग किया /usr/bin/easy_installऔर पाइप को स्थापित करते समय /Library/Python/2.7/site-packages/pip
मुझे निम्न प्रकार से चेतावनी मिली, लेकिन मैंने उन्हें अनदेखा कर दिया और आँख बंद करके प्रतिज्ञा की।

/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

बाद में देखने पर /Library/Python/2.7/site-packages/easy-install.pthऐसा लग रहा था

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)

फिर मैंने पाइप के माध्यम से ansible स्थापित किया

sudo pip install ansible

मुझे यह कहने के लिए संदेश मिले कि आवश्यकताओं को सिस्टम लाइब्रेरी द्वारा पहले ही पूरा कर लिया गया था

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)

तब ansible चलाते समय मुझे यह समस्या हुई

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

और एक पाइप जांच से पता चला है कि पैरामिको को नए सेटप्टूल की आवश्यकता है

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 को केवल सेटपटूल (कोई संस्करण) की आवश्यकता नहीं है और इसलिए पाइप ने सिस्टम सेप्टफूल से संतुष्ट निर्भरता की सूचना दी।

उपाय

मैंने https://docs.python.org/2.7/use/mac.html#getting-and-installing-macpython पर संकेतित प्रक्रिया का उपयोग करके किसी भी स्थानीय अजगर पुस्तकालयों की स्थापना रद्द करके इसे
मेरे लिए शामिल कर लिया।

sudo rm -rf /Library/Python

फिर मैंने / usr / लोकल / बिन जैसे सिम्बलिंक और एक्सेलेबल्स को हटा दिया

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*

और इसी तरह। मैंने कोई एप्लिकेशन भी निकाल दी

sudo rm -rf /Applications/Python\ 2.7/

मैंने तब मैक ओएस एक्स के लिए https://www.python.org/downloads/ से 2.7.13 इंस्टॉलर पैकेज डाउनलोड किया और इसे इंस्टॉल किया।

इस पर एक स्थानीय अजगर और पिप स्थापित /Library/Frameworks/Python.framework/Versions/2.7और सिमलिंक में /usr/local/bin, जिस पर प्रणाली पुस्तकालयों से अलग है /System/Library/Frameworks/Python.frameworkऔर /usr/bin इसलिए है कि मैं

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

और में pip list

setuptools (28.8.0)
six (1.10.0)

ansible अब मेरे लिए काम करता है


1

मेरे PATHलिए pip, गायब हो गया था , इस बात की पुष्टि की गई थीpython -m pip

यहां दो संभावित समाधान, pipवापस जोड़ें PATH। मेरे मामले pipमें वैसे भी आउट ऑफ डेट था, इसलिए इसे अपग्रेड करना तय था:

python -m pip install --upgrade pip

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.