अजगर पर अजगर के दो संस्करण। कैसे 2.7 डिफ़ॉल्ट बनाने के लिए


124

मुझे अपने linuxbox पर अजगर के दो संस्करण मिले हैं:

$python
Python 2.6.6 (r266:84292, Jul 10 2013, 22:48:45) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 


$ /usr/local/bin/python2.7
Python 2.7.3 (default, Oct  8 2013, 15:53:09) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

$ which python
/usr/bin/python
$ ls -al /usr/bin/python
-rwxr-xr-x. 2 root root 4864 Jul 10 22:49 /usr/bin/python

जब मैं pythonइसे 2.7 में डालता हूं तो मैं 2.7 को डिफ़ॉल्ट संस्करण कैसे बना सकता हूं ?


1
जब मैंने अपने फेडोरा को यह किया तो यम या एप्ट-मिल ने कोई काम नहीं किया।
उपयोगकर्ता

@ उपयोगकर्ता: हाँ, मैंने इसी तरह एक प्राचीन मैंड्रेक को तोड़ा ( /usr/bin/env python2.3 के बजाय 2.6 को बदलने का मतलब था आधे का मतलब आज्ञा देना rpmऔर urpmiकाम करना बंद कर देना)।
अष्टकूट

मैंने सेंटोस 5: 1 पर Django को स्थापित करने के लिए निम्नलिखित कदम का पालन किया है, स्रोत कोड से पायथन 3.6 स्थापित करें। 2: शेल में निम्नलिखित कमांड "उर्फ अजगर = / usr / स्थानीय / बिन / python3.6" 3 जी: Django "pip3 इंस्टॉल करें Django" 4 जी स्थापित करने के लिए निम्नलिखित कमांड चलाएं: सत्यापित करने के लिए "अजगर एम-एमंगो --version" Django संस्करण "1.10.5" के साथ स्थापित किया गया था
showmyroutes

मेरे लिए /usr/bin/pythonएक नरम लिंक की ओर इशारा था python2। मैं बस करने के लिए इसे बदलpython3.6
मुनीश

जवाबों:


173

आप शायद अपने डिफ़ॉल्ट पायथन को बदलना नहीं चाहते हैं।

आपके डिस्ट्रो ने एक मानक प्रणाली पायथन को स्थापित किया /usr/bin, और इसमें ऐसी स्क्रिप्ट्स हो सकती हैं जो इस पर निर्भर करती हैं, और इसके द्वारा चयनित होती हैं #! /usr/bin/env python। आप आमतौर पर 2.7 में पायथन 2.6 स्क्रिप्ट के साथ भाग सकते हैं , लेकिन क्या आप इसे जोखिम में डालना चाहते हैं?

उसके शीर्ष पर, /usr/binपैकेजिंग को प्रबंधित करने की आपके पैकेज प्रबंधक की क्षमता को तोड़ सकता है। और अपने निर्देशिकाओं के क्रम को बदलने से PATHपायथन के अलावा बहुत सी अन्य चीजें प्रभावित होंगी। (वास्तव में, यह /usr/local/binआगे होना आम है /usr/bin, और यह वही हो सकता है जो आप वास्तव में चाहते हैं - लेकिन यदि आपके पास इसका दूसरा तरीका है, तो संभवतः इसका एक अच्छा कारण है।)

लेकिन जब आप टाइप करते हैं तो 2.7 चलाने के लिए सिस्टम को पाने के लिए आपको अपने डिफ़ॉल्ट पायथन को बदलने की आवश्यकता नहीं हैpython


सबसे पहले, आप एक शेल उपनाम सेट कर सकते हैं:

alias python=/usr/local/bin/python2.7

टाइप करें कि एक प्रॉम्प्ट पर, या इसे अपने में डाल दें ~/.bashrcयदि आप चाहते हैं कि परिवर्तन लगातार हो, और अब जब आपpython इसे टाइप करते हैं तो यह आपके चुने हुए 2.7 को चलाता है, लेकिन जब आपके सिस्टम पर कुछ प्रोग्राम स्क्रिप्ट चलाने की कोशिश करता है, तो /usr/bin/env pythonयह मानक 2.6 चलाता है।


वैकल्पिक रूप से, बस अपने 2.7 (या अलग-अलग परियोजनाओं के लिए अलग-अलग स्थानों) से बाहर एक आभासी वातावरण बनाएं , और अपने काम को वेनव के अंदर करें।


1
:( आप सही कह रहे हैं। दुर्भाग्य से, मैंने पहले ही @ rohit के उत्तर के अनुसार एक नया सिंबल लिंक बनाया था। अब yumयह कमांड काम नहीं करता! मैंने सिम्पल लिंक को वापस बनाने की कोशिश की, लेकिन यह sudo ln -sf /usr/bin/python2.6 /usr/bin/pythonकोई वर्कअराउंड काम नहीं करता ?
एंथनी

@Anthony: मेरा अनुमान है कि /usr/bin/pythonयह वास्तव में पहले एक सिम्लिंक नहीं था, यह एक आवरण स्क्रिप्ट या निष्पादन योग्य था, और अब आपने इसे अधिलेखित कर दिया है और इसे वापस नहीं पा सकते हैं। यदि rpmअभी भी काम कर रहा है, तो आप मैन्युअल रूप से पायथन पैकेज डाउनलोड कर सकते हैं और इसे बिना इंस्टॉल कर सकते हैं yum
अवतरण

मैं अभी भी 2.6 दुभाषिया प्राप्त कर सकता हूं जब मैं टाइप करता हूं python2.6तो यह अभी भी है।
एंथनी

7
@ एंथनी: और भविष्य में, अगर कोई आपसे / usr / bin (या कहीं भी / usr के अलावा / usr / लोकल) में सामान बदलने के लिए कहता है, तो वहाँ क्या है, और एक बैकअप का एक नोट करें ...
abnert

क्या गन्दी गन्दी बात है मैं खुद में !! मेरे पास एक और सेंटो बॉक्स है जिसमें वह स्क्रिप्ट हो सकती है। अगर मैं इसे वहां से कॉपी करता हूं और इस बॉक्स के usr / bin में डालता हूं। क्या आपको लगता है कि यह काम करेगा?
एंथनी

19

पहले की सूची में, /usr/local/binअपने PATHपर्यावरण चर में जोड़ें/usr/bin

आम तौर पर यह आपके शेल की आरसी फ़ाइल में किया जाता है, उदाहरण के लिए बैश के लिए, आप इसे इसमें डालेंगे .bashrc:

export PATH="/usr/local/bin:$PATH"

यह आपके शेल को पहले एक pythonमें देखने के लिए कारण होगा /usr/local/bin, इससे पहले कि यह एक के साथ चला जाए /usr/bin

(निश्चित रूप से, इसका मतलब है कि आपको यह भी /usr/local/bin/pythonइंगित करना होगा python2.7- यदि यह पहले से ही नहीं है, तो आपको इसे सिमल करना होगा।)


संभवतः किसी चीज के द्वारा निर्धारित किए जाने पर PYTHONHOME को उचित रूप से सेट / अनसेट करना आवश्यक हो सकता है।
मार्सिन

1
यह लगभग उतना ही खतरनाक नहीं है जितना कि समाधान जो हमें बदलने / usr / bin का सुझाव देते हैं ... लेकिन मुझे अभी भी लगता है कि ओपी वास्तव में ऐसा नहीं चाहता है।
अवतरण

इसने उबंटू 14.x से 16.x में अपग्रेड करने के बाद मेरी मदद की
सीखे 2

4

कमांड दर्ज करें

which python

//output:
/usr/bin/python

cd /usr/bin
ls -l

यहां आप कुछ इस तरह देख सकते हैं

lrwxrwxrwx 1 root   root            9 Mar  7 17:04  python -> python2.7

आपका डिफ़ॉल्ट python2.7 पाठ 'अजगर' से जुड़ा हुआ है

इसलिए सॉफ्टलिंक पायथन को हटा दें

sudo rm -r python

फिर ऊपर दिए गए कमांड को फिर से करें

ls -l

आप देख सकते हैं कि सॉफ्टलिंक हटा दिया गया है

-rwxr-xr-x 1 root   root      3670448 Nov 12 20:01  python2.7

फिर python3.6 के लिए एक नया सॉफ्टलिंक बनाएं

ln -s /usr/bin/python3.6 पायथन

फिर pythonटर्मिनल में कमांड का प्रयास करें

//output:
Python 3.6.7 (default, Oct 22 2018, 11:32:17) 
[GCC 8.2.0] on linux

टाइप करें help, copyright, creditsया licenseअधिक जानकारी के लिए।


1
आपकी पोस्ट ओपी के सवाल का जवाब नहीं है।
फ्रैंक

इसने मेरे लिए एक बहुत ही अजीब समस्या हल कर दी। जब मैं रूट या सामान्य टर्मिनल से अजगर संस्करण की जांच करता हूं, तो उसने 3.6.8 दिखाया लेकिन अगर मैं एक .sh और टाइप अजगर-विवर अंदर बनाता हूं, तो वह 2.7 पर मुद्रित होता है। जैसा कि ऊपर उल्लेख किया गया था, एक सॉफ्टलिंक मौजूद था, क्योंकि यह निकला। चरणों का पालन किया और यह तय हो गया है। धन्यवाद।
S4nd33p

धन्यवाद! इससे मुझे "आवश्यक अजगर 3 या बाद में" की समस्या हल हुई
तमीम अताफी

4

अजगर के वर्तमान संस्करण को सत्यापित करें:

$ python --version

फिर अजगर जाँचें कि किस फ़ाइल का प्रतीकात्मक लिंक है।

  $ ll /usr/bin/python

आउटपुट पूर्व:

 lrwxrwxrwx 1 root root 9 Jun 16  2014 /usr/bin/python -> python2.7*

अजगर के अन्य उपलब्ध संस्करणों की जाँच करें:

$ ls /usr/bin/python*

आउटपुट पूर्व:

/usr/bin/python     /usr/bin/python2.7-config  /usr/bin/python3.4         /usr/bin/python3.4m-config  /usr/bin/python3.6m         /usr/bin/python3m
/usr/bin/python2    /usr/bin/python2-config    /usr/bin/python3.4-config  /usr/bin/python3.6          /usr/bin/python3.6m-config  /usr/bin/python3m-config
/usr/bin/python2.7  /usr/bin/python3           /usr/bin/python3.4m        /usr/bin/python3.6-config   /usr/bin/python3-config     /usr/bin/python-config

यदि अजगर के वर्तमान संस्करण को 3.6 संस्करण संपादित फ़ाइल में बदलना चाहते हैं ~ / .bashrc:

vim ~/.bashrc

फ़ाइल के अंत में नीचे पंक्ति जोड़ें और सहेजें:

alias python=/usr/local/bin/python3.6

अजगर 3.6 के लिए पाइप स्थापित करने के लिए

$ sudo apt-get install python3.6 python3.6-dev
$ sudo curl https://bootstrap.pypa.io/ez_setup.py -o - | sudo python3.6
$ sudo easy_install pip

सफलता पर, पाइप के वर्तमान संस्करण की जाँच करें:

$ pip3 -V

आउटपुट पूर्व:

pip 1.5.4 from /usr/lib/python3/dist-packages (python 3.6)

2

सभी ओएस अजगर के एक डिफ़ॉल्ट संस्करण के साथ आता है और यह / usr / बिन में रहता है। सभी स्क्रिप्ट जो OS के साथ आती हैं (उदाहरणार्थ yum) अजगर के इस संस्करण / usr / bin में रहती हैं। जब आप अजगर के एक नए संस्करण को स्थापित करना चाहते हैं तो आप मौजूदा स्क्रिप्ट को तोड़ना नहीं चाहते हैं जो कि अजगर के नए संस्करण के साथ काम नहीं कर सकता है।

ऐसा करने का सही तरीका है कि अजगर को वैकल्पिक संस्करण के रूप में स्थापित किया जाए।

e.g.
wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tar.bz2 
tar xf Python-2.7.3.tar.bz2
cd Python-2.7.3
./configure --prefix=/usr/local/
make && make altinstall

अब ऐसा करने से yum जैसी मौजूदा स्क्रिप्ट अभी भी / usr / bin / python के साथ काम करती है। और आपका डिफ़ॉल्ट पायथन संस्करण / usr / स्थानीय / बिन में स्थापित एक होगा। जब आप अजगर टाइप करते हैं तो आपको 2.7.3 मिलेगा

ऐसा इसलिए होता है। $ PATH चर में usr / bin से पहले / usr / स्थानीय / बिन है।

/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

यदि python2.7 अभी भी डिफ़ॉल्ट python संस्करण के रूप में प्रभावी नहीं है, तो आपको करना होगा

export PATH="/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin"

-8

मुझे लगता है कि आपने 2.7 संस्करण मैन्युअल रूप से इंस्टॉल किए हैं, जबकि 2.6 एक पैकेज से आता है?

सरल उत्तर है: अजगर पैकेज की स्थापना रद्द करें।

अधिक जटिल एक है: मैन्युअल रूप से / usr / स्थानीय में स्थापित न करें। 2.7 संस्करण के साथ एक पैकेज बनाएँ और फिर अपग्रेड करें।

पैकेज हैंडलिंग इस बात पर निर्भर करता है कि आप किस वितरण का उपयोग करते हैं।


5
पायथन पैकेज को डिस्ट्रो द्वारा लगभग निश्चित रूप से आवश्यक है। CentOS RPM- आधारित है, और आधे RPM और YUM उपकरण पायथन में लिखे गए हैं।
अष्टकूट

प्रिय माइकल, कृपया मैन्युअल रूप से स्थापित python2.7 की स्थापना रद्द करने का विकल्प चुनें!
AVA

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

2
आपको कभी भी अजगर को अनइंस्टॉल नहीं करना चाहिए। यह मुझसे ले लो। मैंने इसे किया और इसने मेरी प्रणाली को तोड़ दिया। बहुत सारे ऐप इस पर निर्भर करते हैं। यह बहुत अशुभ है।
पैट्रिक मुतवीरी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.