2016-09-02 10 views
11

मैंने कुछ समय के लिए डेटा विश्लेषण के लिए जिप्टर नोटबुक का उपयोग किया है। मैं अपनी जुपीटर नोटबुक निर्देशिका में एक मॉड्यूल विकसित करना चाहता हूं और नोटबुक में उस नए मॉड्यूल को आयात करने में सक्षम हूं। मेरी jupyter नोटबुक फ़ाइल निर्देशिका निम्नानुसार प्रदर्शित किया जा सकता है;मैं कम निर्देशिका में नोटबुक में jupyter नोटबुक निर्देशिका में मॉड्यूल कैसे आयात करूं?

Jupyter notebooks\ 

    notebook1.ipynb 

    new_module\ 
     __init__.py 
     newfunction.py 

    currentnotebooks\ 
     notebook2.ipynb 

जब notebook1.ipynb यह तथापि काम करता है जब मैं notebook2.ipynb में मैं निम्नलिखित मिल ImportError: No module named 'new_module' समान आदेश की कोशिश में उपयोग import new_module। दो स्पष्ट समाधान ए हैं) newnm मॉड्यूल को वर्तमान नोटबुक निर्देशिका या बी में ले जाएं) नोटबुक 2.ipynb को new_module के समान स्तर तक ले जाएं। मैं फाइल संरचना के साथ गड़बड़ नहीं करना चाहता हूं। क्या यह संभव है?

+0

यदि आप 'sys.path' में सूचीबद्ध निर्देशिकाओं में से एक में 'new_module' डालते हैं, तो यह कहीं से भी आयात योग्य होगा। –

उत्तर

15

आपको यह सुनिश्चित करना होगा कि new_module की मूल निर्देशिका आपके पायथन पथ पर है। एक नोटबुक new_module एक स्तर नीचे है कि के लिए, इस कोड चाल करना होगा:

import os 
import sys 
nb_dir = os.path.split(os.getcwd())[0] 
if nb_dir not in sys.path: 
    sys.path.append(nb_dir) 

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

आयात notebook1 के लिए आयात करने का कारण यह है कि sys.path में '' (खाली स्ट्रिंग) है, जो चल रहा है दुभाषिया (कर्नेल, इस मामले में) की वर्तमान निर्देशिका है। explain python path के लिए एक Google खोज PYTHONPATH (उर्फ sys.path) का उपयोग करने के तरीके के बारे में कई अच्छी व्याख्याएं बदलती है।

+0

तो मुझे हमेशा आपके सुझाए गए बॉयलरप्लेट कोड को करना होगा इससे पहले कि मैं अन्य मॉड्यूल तक पहुंच सकूं, भले ही वे ऊपर केवल एक फ़ोल्डर हों? क्या इसे हासिल करने का कोई और सही तरीका नहीं है, उदा। सापेक्ष आयात के माध्यम से? (हालांकि मुझे यह स्वीकार करना होगा कि मुझे अभी भी यकीन नहीं है कि रिश्तेदार आयात कैसे काम करते हैं) –

+1

अधिक या कम। अपवाद होगा यदि मूल निर्देशिका एक मॉड्यूल भी थी (और इसलिए एक'__init __। Py' फ़ाइल थी), लेकिन यह मेरे लिए अजीब और असंभव दोनों लगता है। 'PythonPATH' में नोटबुक निर्देशिका डालने से इसे sys.path में जोड़ने की आवश्यकता से बच जाएगा। – cco

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