2015-08-27 9 views
6

मैं जिप्टर को कॉन्फ़िगर करना चाहता हूं ताकि मुझे दो अलग-अलग नोटबुक (या यहां तक ​​कि एक नोटबुक में एक से दूसरी तरफ स्विच भी हो) में एक साथ समय में पाइथन 2.7 और 3.4 कर्नेल चलाने की अनुमति मिल सके।(कैसे) मैं जिप्टर (आईपीथॉन) में साइड-बाय-साइड पाइथन 2.7 और 3.4 नोटबुक चला सकता हूं?

(1) क्या यह संभव है?

मैं पूछ रहा हूं क्योंकि इसे Using both Python 2.x and Python 3.x in IPython Notebook में सुझाव दिया गया था कि यह संभव होगा, लेकिन यह वास्तव में यह कैसे काम करेगा इस पर कोई विस्तृत उत्तर प्रदान नहीं किया गया था।

आप https://try.jupyter.org में भी देख सकते हैं कि यह किसी भी तरह से बहुत व्यवहार्य प्रतीत होता है (और आप एक पायथन 2 कर्नेल से एक पायथन 3 कर्नेल तक भी स्विच कर सकते हैं)। तो मुझे यह मानना ​​उचित लगता है कि यह वास्तव में संभव है (लेकिन अगर मैं गलत हूं तो कृपया मुझे सही करें)।

(2) यह कैसे किया जाता है?

पिछला जवाब (Open IPython Notebook 2.7 and 3.4 in Parallel में उदा) दो अलग बंदरगाहों पर दो अलग नोटबुक सर्वर IPython आरंभ करने की अनुशंसा। यह, ज़ाहिर है, पूरी तरह से तार्किक और संभव है, लेकिन मेरे प्रश्न का उत्तर नहीं देता है।

मैं अजगर के लिए ipython स्थापित करने में कामयाब रहे 2 & 3. मैं तो प्रत्येक संबंधित अजगर वातावरण में निम्नलिखित को फोन करके jupyter में दिखाने के लिए दोनों के दाने मिला:

ipython kernelspec install-self

यह मेरे लिए kernel.json फ़ाइलें बनाई और अब मैं jupyter में एक नई नोटबुक बनाने के लिए उनमें से किसी एक का चयन कर सकता हूं। अजगर 2 के लिए kernel.json का उदाहरण:

{ 
"display_name": "Python 2", 
"language": "python", 
"argv": [ 
    "/usr/local/opt/python/bin/python2.7", 
    "-m", 
    "ipykernel", 
    "-f", 
    "{connection_file}" 
] 
} 

समस्या यह है, जब मैं एक अजगर 2 पर्यावरण से jupyter शुरू करते हैं, मैं केवल एक अजगर 2 गिरी चला सकते हैं ($PYTHONPATH परिभाषित के साथ) (एक दूसरे को खोलते दुर्घटना होगा संबंधित नोटबुक)। वही, जब मैं एक पायथन 3 पर्यावरण से jupyter शुरू करता हूं ($PYTHONPATH परिभाषित किया गया है)। यह आम तौर पर मुझे समझ में आता है, लेकिन मैं जानना चाहता हूं कि jupyter दोनों को कर्नेल को उसी jupyter इंस्टेंस से चलाने की अनुमति देने के लिए कैसे शुरू करें या कॉन्फ़िगर करें और अभी भी मेरे पैकेज लोड करने में सक्षम होने के लिए अपना स्वयं का विशिष्ट $PYTHONPATH एस निर्दिष्ट करें।

मुझे लगा कि यह मेरी वास्तविक समस्या है - को शुरू करने से पहले $PYTHONPATH को पूर्वनिर्धारित करना। तो मैं कहा जाता है:

unset PYTHONPATH 
ipython notebook 

मैं अब वास्तव में एक भी jupyter उदाहरण से दोनों कर्नेल (py2 & 3) चला सकते हैं, लेकिन मैं विशिष्ट स्थानीय निर्देशिका से अजगर संकुल लोड नहीं कर सकता। मुझे लगता है कि मैं इसे मैन्युअल रूप से नोटबुक के अंदर कर सकता हूं:

import sys 
sys.path.append("/some/path/lib/python2.7/site-packages") 

लेकिन क्या यह वास्तव में मुझे यह करना चाहिए? या मैं अतिरिक्त निर्देशिकाओं को कॉन्फ़िगर कर सकता हूं जिन्हें मैं आमतौर पर $PYTHONPATH में लिखता हूं (उदा। kernel.json फ़ाइल?

पुनश्च: कृपया मत पूछो क्यों मैं इस की जरूरत है - नहीं, मुझे नहीं पता वास्तव में चाहें - लेकिन मैं अभी भी पता करने के लिए इस अगर और कैसे संभव हो सकता है चाहते हैं।

[संपादित करें]

कृपया ध्यान दें कि मैं सहज (जैसे एनाकोंडा के रूप में) कुछ अजगर प्रबंधन उपयोगिता यह सब पूरा करने के लिए, (जब तक यह एक ही रास्ता है) स्थापित करने नहीं होगा।

+0

ठीक है, मैंने रास्ते में अपने शुरुआती प्रश्नों का उत्तर दिया, लेकिन कृपया मुझे बताएं कि क्या आप '$ पायथनपथ 'भाग में मदद कर सकते हैं :) धन्यवाद! – Chris

उत्तर

1

मेरे पास एनाकोंडा में पाइथन 2 और 3 स्थापित है जहां 3 मुख्य स्थापना है और 2 मुख्य स्थापना के बाद एक पर्यावरण स्थापना है। डिफ़ॉल्ट रूप से 'ipython नोटबुक' चलाते समय यह केवल उस शैल में सक्रिय पायथन का संस्करण चलाता है जिसमें इसे लॉन्च किया गया था। पाइथन 2 सक्रिय होने पर पाइथन 2 सक्रिय होने पर फिर से 'ipython kernelspec install-self' चलाने के बाद, दोनों के लिए कर्नेल आईपीथन नोटबुक में उपलब्ध हैं, इस पर ध्यान दिए बिना कि पाइथन का कौन सा संस्करण लॉन्च किया गया था, जिसमें से इसे लॉन्च किया गया था।

यह देखते हुए कि 'पायथन 2' मेरे पायथन 2 पर्यावरण का नाम है, 'सक्रिय env' 'env' नामक वातावरण को सक्रिय करने के लिए एनाकोंडा कमांड है और 'निष्क्रिय' वर्तमान में सक्रिय वातावरण को निष्क्रिय करने के लिए आदेश है (यदि कोई है) आदेश है कि मैं इस विन्यास सक्षम करने के लिए प्रयोग किया गया:

IPython नोटबुक में
activate python2 
ipython kernelspec install-self 
deactivate 
ipython kernelspec install-self 

sys.path में परिवर्तन गतिशील रूप से और उचित रूप से अजगर के संस्करण के आधार है कि यह वर्तमान में चलाता है। जब यह को Python2 चलाता sys.path है:

['', 'C:\\Users\\tn\\Documents\\python', 'C:\\Anaconda3\\envs\\python2\\python27.zip', 'C:\\Anaconda3\\envs\\python2\\DLLs', 'C:\\Anaconda3\\envs\\python2\\lib', 'C:\\Anaconda3\\envs\\python2\\lib\\plat-win', 'C:\\Anaconda3\\envs\\python2\\lib\\lib-tk', 'C:\\Anaconda3\\envs\\python2', 'C:\\Users\\tn\\AppData\\Roaming\\Python\\Python27\\site-packages', 'C:\\Anaconda3\\envs\\python2\\lib\\site-packages', 'C:\\Anaconda3\\envs\\python2\\lib\\site-packages\\Sphinx-1.3.1-py2.7.egg', 'C:\\Anaconda3\\envs\\python2\\lib\\site-packages\\cryptography-0.9.1-py2.7-win-amd64.egg', 'C:\\Anaconda3\\envs\\python2\\lib\\site-packages\\win32', 'C:\\Anaconda3\\envs\\python2\\lib\\site-packages\\win32\\lib', 'C:\\Anaconda3\\envs\\python2\\lib\\site-packages\\Pythonwin', 'C:\\Anaconda3\\envs\\python2\\lib\\site-packages\\setuptools-18.1-py2.7.egg', 'C:\\Anaconda3\\envs\\python2\\lib\\site-packages\\IPython\\extensions'] 

python3 को कर्नेल टॉगल करने के बाद, sys.path हो जाता है:

['', 'C:\\Users\\tn\\Documents\\python', 'C:\\Anaconda3\\python34.zip', 'C:\\Anaconda3\\DLLs', 'C:\\Anaconda3\\lib', 'C:\\Anaconda3', 'C:\\Anaconda3\\lib\\site-packages', 'C:\\Anaconda3\\lib\\site-packages\\Sphinx-1.3.1-py3.4.egg', 'C:\\Anaconda3\\lib\\site-packages\\cryptography-0.9.1-py3.4-win-amd64.egg', 'C:\\Anaconda3\\lib\\site-packages\\win32', 'C:\\Anaconda3\\lib\\site-packages\\win32\\lib', 'C:\\Anaconda3\\lib\\site-packages\\Pythonwin', 'C:\\Anaconda3\\lib\\site-packages\\setuptools-18.1-py3.4.egg', 'C:\\Anaconda3\\lib\\site-packages\\IPython\\extensions'] 

PYTHONPATH = C: \ Users \ tn \ दस्तावेज़ \ अजगर शामिल किया गया है पायथन के दोनों संस्करणों के लिए sys.path में।

आईपीथॉन नोटबुक के लिए पायथन संस्करण के आधार पर sys.path को अनुकूलित करने के लिए, पर्यावरण चर PYTHONSTARTUP (पायथन 2) (PYTHONSTARTUP (पायथन 3) भी देखें) का उपयोग किया जा सकता है। इस चर में एक पठनीय पायथन स्क्रिप्ट होनी चाहिए जिसे इंटरैक्टिव मोड के स्टार्टअप के दौरान निष्पादित किया जाएगा। पायथन 2 और 3 दोनों के उपयोग के लिए यह दोनों द्वारा निष्पादन योग्य होना चाहिए। उदाहरण के लिए, C: \ Users \ tn \ दस्तावेज़ \ अजगर मैं 'शुरू' नाम निम्न स्क्रिप्ट है कि यह क्रियान्वित अजगर के मुख्य संस्करण निर्धारित करता है और एक पथ sys.path है कि में समाप्त होने वाले संलग्न कर देता है बनाया:

import sys 
v = sys.version_info[0] 
if v == 2 or v == 3: 
    sys.path.append(r'C:\Users\tn\Documents\python' + '\\' + str(v)) 

अब, पायथन 2 sys.path [-1] के साथ आईपीथॉन नोटबुक को पुनरारंभ करने पर, सी: \ उपयोगकर्ता \ tn \ दस्तावेज़ \ python \ 2 है जबकि पायथन 3 के लिए यह सी: \ उपयोगकर्ता \ tn \ दस्तावेज़ \ python \ 3 है।

+0

धन्यवाद, मुझे 'पायथनस्टार्टअप' पर एक नज़र डालेंगी, लेकिन मुझे शायद यह उल्लेख करना चाहिए था कि मैं एनाकोंडा का उपयोग नहीं कर रहा हूं (और नहीं करना चाहता)। – Chris

संबंधित मुद्दे