OSX El Capitan पर सेटप्टूल को अपग्रेड करना


81

मैं setuptools के उन्नयन की कोशिश कर रहा हूँ। वैसे वास्तव में मैं ansible को अपग्रेड करने की कोशिश कर रहा हूं, लेकिन यह असफलताओं को अपग्रेड करने और विफल करने की कोशिश कर रहा है। इसे स्वयं करने की कोशिश भी विफल हो जाती है। यहां तक ​​कि इसे अनइंस्टॉल करने की कोशिश भी विफल हो जाती है

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

मैंने यह नहीं सोचा कि गलत क्या है। /System/Library/Frameworks/Python.framework/Versions/2.7/हर एक फ़ाइल में और उसके नीचे सभी फाइलों को देखते हुए स्वामित्व हैroot:wheel

मेरे द्वारा यह कैसे किया जा सकता है?


2
मेरे पास कोई हल नहीं है, लेकिन मेरे पास एक स्पष्टीकरण है: यह शायद नए सिस्टम इंटीग्रिटी प्रोटेक्शन के कारण है । पाइप उन चीजों को संशोधित करने की कोशिश कर रहा है, जहां इसकी अनुमति नहीं है, यहां तक ​​कि इसके साथ भी नहीं sudoइस प्रश्न को देखें । मैंने अभी तक इससे निपटने का समय नहीं लिया है। --userपाइप करने का विकल्प शायद वही है जो मैं देखूंगा। यदि आपको सब कुछ "अपडेट" करने का व्यावहारिक समाधान मिल गया है, तो कृपया साझा करें!
आर्थर

मुझे ipdbत्रुटि मिल रही है जो इससे जुड़ी हुई है setuptools। अपग्रेड किए गए सेटअपटूल काम नहीं करते हैं। यह साथ काम करता है --user=pythonलेकिन फिर भी ipdb एरर को ठीक नहीं करता है।
R11G

जवाबों:


189

यह OS X El Capitan में पेश सिस्टम इंटीग्रिटी प्रोटेक्शन के कारण होता है।

--user pythonकमांड में जोड़ने से यह काम करने की अनुमति देता है।

दूसरे शब्दों में

pip install --upgrade setuptools --user python

2
pip(विपरीत easy_install) sudo की आवश्यकता नहीं है, क्योंकि आप इसे pythonउपयोगकर्ता का उपयोग करने दे रहे हैं , मैंने सुनिश्चित किया कि यह काम करता है।
कॉफ

1
डॉकटर कंटेनर के अंदर CentOS 7 पर भी काम करता है। किसी कारण से विफल हो रहा था (हालांकि सटीक एक ही सेटअप ने मई 2016 से पहले इस कदम के बिना काम किया ...)
जेरलिंग्लुगी

2
मुझे यह काम करने के लिए नहीं मिला, और मुझे समझ में नहीं आया कि कैसे --user विकल्प काम करने वाला है। मेरे लिए जो काम किया गया था वह सिस्टम इंटेप्टीसिटी प्रोटेक्शन को अस्थाई रूप से निष्क्रिय करने के लिए था, जबकि सेटप्टूल को अपग्रेड करने (आईपाइथन को स्थापित करने के संबंध में) और फिर बाद में इसे फिर से सक्षम करना। ऐसा करने के लिए: पुनर्प्राप्ति मोड में बूट करें (cmd + R), टर्मिनल लॉन्च करें और दर्ज करें csrutil disable। रिबूट, और अपग्रेड करने के बाद, पुनर्प्राप्ति मोड में रीबूट करें और दर्ज करें csrutil enable। रिबूट के बाद, ipython ने मेरे लिए ठीक काम करना जारी रखा।
गौर

मैं इस कमांड को सफलतापूर्वक निष्पादित कर सकता हूं, लेकिन कोई भी अपडेट नहीं किया गया है। आउटपुट इस तरह दिखता है: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

मैं अंत में यहां दिए गए निर्देशों का पालन करके काम करने में सक्षम था: apple.stackexchange.com/questions/209572/…
diidu

2

अवलोकन

यह समस्या मैक ओएस पर सिस्टम इंटीग्रिटी प्रोटेक्शन (एसआईपी) के साथ मिलकर पाइथन लाइब्रेरी का विरोध कर रही है, जो सिस्टम पायथन लाइब्रेरी की सुरक्षा करती है।

मेरी राय में सबसे अच्छा समाधान अपने स्वयं के पायथन इंस्टॉलेशन को अनइंस्टॉल करना और फिर से स्थापित करना है और मैक ओएस द्वारा प्रदान किए गए पायथन पुस्तकालयों के लिए अलग रखें जो एसआईपी द्वारा संरक्षित हैं।

मैं एसआईपी को निष्क्रिय करने के लिए इसका समर्थन करता हूं क्योंकि मुझे उम्मीद है कि एसआईपी किसी भी भविष्य के मैक ओएस रिलीज का एक हिस्सा होगा और एसआईपी इसका कारण नहीं है, यह सिर्फ पायथन पुस्तकालयों के विरोध की समस्या को उजागर करता है।

विवरण

मैं भी इस मुद्दे को स्थापित करने की कोशिश कर रहा था।

मेरी समस्या तब शुरू हुई जब मैंने मैक ओएस के लिए इंस्टॉलेशन इंस्टॉलेशन निर्देशों का पालन किया, जो कि पाइप के माध्यम से इंस्टॉल करना और पाइप को स्थापित करना है easy_installजैसा कि नवीनतम विज्ञप्ति वाया पिप में वर्णित है

समस्या इस तरह से पाइप को स्थापित करते समय, easy_installमैक ओएस पर प्रदान की जाती है easy_install, /usr/bin/easy_installलेकिन यह easy-install.pthफ़ाइल में लिखता है /Library/Python/2.7/site-packages/easy-install.pthऔर वह फ़ाइल मैक ओएस को संदर्भित करता है जो पायथन लाइब्रेरी प्रदान करता है।

इसके बाद ansible को pip install ansibleतब स्थापित करने के साथ रिपोर्ट करता है कि setuptools की आवश्यकता मैक ओएस द्वारा संतुष्ट है बशर्ते कि /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python
Ansible पर Python लाइब्रेरी को setuptools की आवश्यकता होती है, लेकिन एक संस्करण निर्दिष्ट नहीं करता है। एक अन्य आश्रित पैकेज, पैरामीको को सेटप्टूल> = 11.3 की आवश्यकता होती है, लेकिन पाइप के माध्यम से इसे स्थापित करते समय इसकी जाँच नहीं की जाती है। जब आप ansible को चलाने का प्रयास करते हैं, तो यह शिकायत करता है कि सेटअप टूल 1.1.6 है। यह Mac OS के साथ प्रदान किए गए setuptools का संस्करण है, और अब SIP द्वारा सुरक्षित है, इसलिए इसे अपग्रेड नहीं किया जा सकता है।

SIP को अक्षम करने के बजाय, मैंने https://docs.python.org/2.7/use/mac.html#getting-and-installing-macpython पर संकेत के रूप में अपने स्थानीय पायथन की स्थापना रद्द करके इसे ठीक किया और फिर डाउनलोड और इंस्टॉल किया।

आप rm बारे में चिंतित हैं, आप के बजाय mv कर सकते हैं
मैंने किया था की स्थापना रद्द करने

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

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

इसने एक स्थानीय अजगर और पाइप को स्थापित किया /Library/Frameworks/Python.framework/Versions/2.7और मेरी $ PATH के लिए /usr/local/binतैयार होने के साथ-साथ सहानुभूति भी पाई /Library/Frameworks/Python.framework/Versions/2.7। यह मैक ओएस द्वारा प्रदान की गई पुस्तकालयों से सब कुछ अलग रखता है /System/Library/Frameworks/Python.frameworkऔर /usr/bin इसलिए मुझे मिलता है

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

मैं तो साथ ansible स्थापित pip install ansible
फिर जब मैं चलाने which ansibleमैं

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

और में pip list

setuptools (28.8.0)
six (1.10.0)

और एमिअस अब मेरे लिए काम करता है क्योंकि मैक ओएस पायथन पुस्तकालयों को नए इंस्टॉल द्वारा संदर्भित नहीं किया गया है।

ध्यान दें कि इंस्टॉलर की स्थापना $ PATH के कारण, which pythonअब है /Library/Frameworks/Python.framework/Versions/2.7/bin/pythonऔर /usr/local/bin/pythonइस के लिए एक सिमलिंक है।
यदि आप सिस्टम पायथन चाहते हैं, तो आपको / usr / bin / python का उपयोग करना होगा या $ PATH को बदलना होगा


1

इसका उत्तर यह है कि आप ओएस के साथ जहाज बनाने वाले कारखाने के अजगर के लिए OSX पर सेटप्टूल को अपडेट नहीं कर सकते हैं। कारण यह है कि फ़ाइलों /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/pythonको उपयोगकर्ता द्वारा हटाया या संशोधित नहीं किया जा सकता है। न केवल सामान्य उपयोगकर्ता लेकिन भले ही आपके पास रूट अनुमतियां हों, आप उन फ़ाइलों को संशोधित करने में असमर्थ होंगे।

सुनिश्चित करें कि आप सेट-अप के नए संस्करण को स्थापित करने के लिए विभिन्न अन्य तरीकों का उपयोग कर सकते हैं लेकिन यह डिफ़ॉल्ट सिस्टम पैकेज को ओवरराइड नहीं करेगा। मतलब अगर आप --user pythonध्वज के उपयोग के सुझाए गए मार्ग पर चलते हैं , या आप उन्हें बिना रूट के स्थापित करना चुनते हैं ~/Library, तो यह सिस्टम फ़ाइलों के संस्करण को ओवरराइड नहीं करेगा।

आप या रूट को सिस्टम डिफॉल्ट को संशोधित करने में असमर्थ होने का कारण एल कैपिटान + में एसआईपी अनुमति प्रतिबंध है। आप SIP को अक्षम कर सकते हैं लेकिन यह आमतौर पर अनुशंसित नहीं है।

इसके बजाय केवल उचित समाधान एक अजगर virtualenv का उपयोग करना है।

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