होमब्रे: पाइथन 3.7 से पाइथन 3.6.5.x तक रोलबैक?


72

एक brew upgradeअजगर 3.7 करने के लिए अपने सिस्टम अजगर का उन्नयन किया। दुर्भाग्य से, पायथन 3.7 अन्य सॉफ़्टवेयर को तोड़ता है जिन्हें मुझे उपयोग करने की आवश्यकता है (सहित, लेकिन इसे केवल अंसिबल तक सीमित नहीं)। मुझे लगता है कि इन समस्याओं को अगले सप्ताह में काम किया जाएगा, लेकिन इस बीच, मैं Python के लिए रोलबैक करना चाहूंगा 3.6.5.x

यह brew info pythonदर्शाता है कि पिछले संस्करण अभी भी स्थापित हैं और शुद्ध नहीं हैं:

 brew info python
python: stable 3.7.0 (bottled), HEAD
Interpreted, interactive, object-oriented programming language
https://www.python.org/
/usr/local/Cellar/python/3.6.5 (4,825 files, 100.8MB)
  Poured from bottle on 2018-03-31 at 20:21:57
/usr/local/Cellar/python/3.6.5_1 (4,788 files, 99.9MB)
  Poured from bottle on 2018-06-20 at 16:00:26
/usr/local/Cellar/python/3.7.0 (4,869 files, 103.3MB)
  Poured from bottle on 2018-07-01 at 19:30:37
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/python.rb

अन्य साइटों द्वारा सुझाए गए विभिन्न brew linkऔर brew installआदेश काम नहीं करते हैं:

 brew link python@3.6.5
Error: No such keg: /usr/local/Cellar/python@3.6.5
 brew link python@3.6.5_1
Error: No such keg: /usr/local/Cellar/python@3.6.5_1
 brew install python@3.6.5
Error: No available formula with the name "python@3.6.5" 
==> Searching for a previously deleted formula (in the last month)...
Error: No previously deleted formula found.
==> Searching for similarly named formulae...
==> Searching local taps...
Error: No similarly named formulae found.
==> Searching taps...
==> Searching taps on GitHub...
Error: No formulae found in taps.

10
जिनके पास 3.6.5_1 स्थापित नहीं है, उनके लिए इसे काढ़ा बनाने का एक तरीका है: stackoverflow.com/a/51125014/760905
MartMMGGyver

एक अजगर संस्करण 3.7.1 है। शायद यह आपकी समस्याओं को ठीक करता है।
JMH

जवाबों:


82

यदि आपके पास अभी भी पिछले संस्करण उपलब्ध हैं, तो आप उपयोग कर सकते हैं

brew switch python 3.6.5_1

1
मुझे दो महीने दीजिए मैं 3.7 पर स्विच करने के लिए तैयार रहूंगा। जब वह दिन आता है, तो मैं brew switch ...3.7 पर वापस जाने के लिए इस आदेश को कैसे पूर्ववत करता हूं ?
पीटर बेंग्सन

यह Python 3.6.5 से जुड़ा एक आभासी वातावरण बनाने के लिए अलग कैसे है?
jmh

@jmh किसी कारण से मेरा 3.6.5 आभासी वातावरण टूट गया जब मैंने होमबॉव को 3.7 में अपडेट करने के लिए उपयोग किया, और मुझे पता नहीं चला कि क्यों। बेशक, मैंने पहली बार आभासी वातावरण बनाने के कारणों में से एक था उस मुद्दे से बचना। स्विचिंग वापस तय कर दी। चूँकि 3.7 में कुछ भी मेरे लिए महत्वपूर्ण नहीं है, मैं इस समय केवल 3.6.5 के साथ चिपका हूँ।
knilsilooc

2
मैंने महसूस किया कि ऊपर का कारण यह है कि पायथन का अंतर्निहित शिरा में सहानुभूति बनाता है, जो पायथन से 3.6.x से 3.7.x पर जाने पर टूट जाता है। सिम्बलिंक python3 -m venv --copies venvबनाने के बजाय पायथन फ़ाइलों के साथ वेनव्स बनाना , जो आपके पायथन संस्करण को अपग्रेड करते समय उन्हें तोड़ने से रोकता है।
knilsilooc

8
Error: python does not have a version "3.6.5_1" in the Cellar. python installed versions: 3.7.0
मर्ग्लूम

51

यदि आपके पास स्विच करने के लिए पिछला संस्करण नहीं है, तो आप पिछले सूत्र से इस तरह से स्थापित कर सकते हैं:

$ brew unlink python
$ brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/f2a764ef944b1080be64bd88dca9a1d80130c558/Formula/python.rb

अपडेट 2019-10

--ignore- निर्भरता नोटिस

यदि आप त्रुटि --ignore-dependenciesको दूर करने के लिए ध्वज का उपयोग कर रहे हैं recursive dependency, तो pip3 installइस तरह की स्थापना के बाद यह आपको निम्न त्रुटि दे सकता है :

pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.

एक वर्कअराउंड पहले अपनी निर्भरता स्थापित करने के लिए हो सकता है (सिवाय सब कुछ sphinx-doc)

$ brew install pkg-config gdbm openssl readline sqlite xz

ध्यान दें कि इसकी आवश्यकता है opensslऔर openssl@1.1 कि जो कि homebrew python 3.7.4_1 में एक नवीनतम निर्भरता है


1
मुझे लगता है कि यह उपयोगी होगा यदि आप भी बताते हैं कि क्या brew unlink pythonकरता है।
nbr

इसके अलावा, आपको इस बात पर जोर देना चाहिए कि यह आपके वर्तमान पायथन 3.7 संस्करण को स्पष्ट रूप से नहीं हटाता है, और बाद में आप इसे वापस स्विच कर सकते हैं (उदाहरण के लिए https://apple.stackexchange.com/a/329192/90775 का उपयोग करके )।
nbr

9
यदि आपको एक पुनरावर्ती निर्भरता के बारे में कोई समस्या मिलती है, तो यह निर्भरता की अनदेखी करके बाईपास किया जा सकता है brew install --ignore-dependencies https://raw.githubusercontent.com/Homebrew/homebrew-core/f2a764ef944b1080be64bd88dca9a1d80130c558/Formula/python.rb:।
एरिक वीनर

यदि --ignore-dependenciesस्फिंक्स के कारण काम नहीं करता है, तो स्फिंक्स में निर्भरता पर टिप्पणी करें और यहाँ वर्णित के रूप में स्फिंक्स को फिर से स्थापित करें: pyimagesearch.com/2019/01/30/…
thadk

Error: python contains a recursive dependency on itself: python depends on sphinx-doc sphinx-doc depends on python
punkrockpolly

11

दो विकल्प

पहले से स्थापित पायथन संस्करण को पुनर्प्राप्त करने के लिए:

brew switch python 3.x.x_x # Ex. 3.6.5_1

brew info pythonयह देखने के लिए उपयोग करें कि आपने पहले क्या स्थापित किया है

पायथन 3.6.5 का एक साफ स्थापित करने के लिए उपयोग करें:

brew unlink python # If you have installed (with brew) another version of python
brew install --ignore-dependencies https://raw.githubusercontent.com/Homebrew/homebrew-core/f2a764ef944b1080be64bd88dca9a1d80130c558/Formula/python.rb

लंबा जवाब

होमब्रे के साथ पायथन को स्थापित करने के दो सूत्र हैं: python@2और python
पहला पायथन 2 के लिए और दूसरा पायथन 3 के लिए है।

नोट: आप वेब पर पुराने उत्तर पा सकते हैं जहां इसे python3पायथन संस्करण 3 को स्थापित करने के लिए सूत्र नाम के रूप में उल्लिखित किया गया है। अब यह बस है python!

डिफ़ॉल्ट रूप से, इन सूत्रों के साथ आप पायथन के संबंधित प्रमुख संस्करण का नवीनतम संस्करण स्थापित कर सकते हैं। तो, आप सीधे 3.6 की तरह एक मामूली संस्करण स्थापित नहीं कर सकते।

उपाय:

के साथ brew, आप सूत्र के पते का उपयोग करके एक पैकेज स्थापित कर सकते हैं, उदाहरण के लिए एक गिट रिपॉजिटरी में।

brew install https://the/address/to/the/formula/FORMULA_NAME.rb

या विशेष रूप से पायथन 3 के लिए

brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/COMMIT_IDENTIFIER/Formula/python.rb

आपके द्वारा निर्दिष्ट किया गया पता वांछित संस्करण के लिए सूत्र (python.rb) के अंतिम प्रतिबद्ध का पता है। आप homebrew-core / Formula / python.rb के इतिहास को देखकर कमेंट आइडेंटिफ़ायर पा सकते हैं

https://github.com/Homebrew/homebrew-core/commits/master/Formula/python.rb

पायथन> 3.6.5

ऊपर दिए गए लिंक में आपको 3.6.5 से ऊपर पायथन के संस्करण के लिए कोई सूत्र नहीं मिलेगा। उस (आधिकारिक) भंडार के अनुरक्षकों ने पायथन 3.7 को जारी किया, वे केवल पायथन 3.7 की रेसिपी को अपडेट सबमिट करते हैं।

जैसा कि ऊपर बताया गया है, होमब्रे के साथ आपके पास केवल पायथन 2 (अजगर 2 @) और पायथन 3 (अजगर) है, पायथन 3.6 के लिए कोई स्पष्ट सूत्र नहीं है

हालाँकि वे मामूली अपडेट ज्यादातर मामलों में अप्रासंगिक होते हैं और अधिकांश उपयोगकर्ताओं के लिए, मैं खोज करूँगा कि किसी ने 3.6 के लिए एक स्पष्ट सूत्र किया है।




2

आप अस्थायी रूप से बैकडेट कर सकते हैं homebrew-coreऔर HOMEBREW_NO_AUTO_UPDATEइसे जगह में रखने के लिए चर सेट कर सकते हैं :

cd `brew --repo homebrew/core`
git checkout f2a764ef944b1080be64bd88dca9a1d80130c558
export HOMEBREW_NO_AUTO_UPDATE=1
brew install python
brew install vim --with-python

मैं स्थायी रूप से होमब्रेव-कोर को बैकडेट करने की अनुशंसा नहीं करता हूं, क्योंकि आप सुरक्षा पैच पर याद करेंगे, लेकिन यह परीक्षण के प्रयोजनों के लिए उपयोगी है।

आप brew extractकमांड का उपयोग करके होमब्रेव फॉर्मूले के पुराने संस्करणों को अपने ही टैप (tap_owner / tap_name) में भी निकाल सकते हैं :

brew extract python tap_owner/tap_name --version=3.6.5

अपना खुद का टैप बनाना या किसी ऐसे व्यक्ति को ढूंढना जिसके पास 3.6 है और अपडेट के साथ अन्य श्रृंखला को बनाए रखना निश्चित रूप से जाने का सबसे अच्छा तरीका है। यदि वे इसे ठीक से करते हैं, तो आपके पास पूरी तरह से योग्य संस्करण हो सकता है और इसके साथ लिंक हो सकता है brew link python@3.6.x। हालांकि pyenvएक और विकल्प भी है।
ड्रैगन

-1

मैं इस पर एक विशेषज्ञ नहीं हूँ, लेकिन एक ही मुद्दा था। इसी से मेरा काम बना है: $ brew unlink python $ brew uninstall --ignore-dependencies python3 $ brew uninstall pipenv then from https://www.python.org/downloads/ installed python 3.6.6 $ brew install pipenv

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