ipynb एक और ipynb फ़ाइल आयात करता है


99

इंटरएक्टिव पाइथन (आईपाइथन) बस आश्चर्यजनक है, खासकर जब आप उड़ने पर चीजों को एक साथ जोड़ रहे हैं ... और इसे इस तरह से करता है कि वापस जाना आसान है।

हालाँकि, जो दिलचस्प लगता है वह है बहु-आईफ़ोन नोटबुक (ipynb files) के उपयोग-मामले। यह स्पष्ट रूप से लगता है कि एक नोटबुक को अन्य नोटबुक के साथ संबंध नहीं माना जाता है, जो समझ में आता है, सिवाय इसके कि मैं अन्य ipynb फ़ाइलों को आयात करना पसंद करूंगा।

मेरे द्वारा देखी जाने वाली एकमात्र वर्कअरीब मेरी * .ipynb फ़ाइलों को * .py फ़ाइलों में परिवर्तित कर रही है, जिसे फिर मेरी नोटबुक में आयात किया जा सकता है। एक परियोजना में सब कुछ एक फाइल रखने के लिए थोड़ा अजीब है, खासकर अगर मैं वास्तव में कोड-पुन: उपयोग के लिए धक्का देना चाहता हूं (क्या यह अजगर के मूल सिद्धांत नहीं है?)।

क्या मैं कुछ भूल रहा हूँ? क्या यह ipython नोटबुक्स का समर्थित उपयोग मामला नहीं है? क्या एक और समाधान है जिसे मैं एक और नोटबुक में एक ipynb फ़ाइल के आयात के लिए उपयोग कर सकता हूं? मैं ipynb का उपयोग जारी रखना पसंद करूंगा, लेकिन यह वास्तव में अभी मेरे वर्कफ़्लो को गड़बड़ कर रहा है :(


संभावित डुप्लिकेट: stackoverflow.com/questions/19082397/…
वॉरेन वीकेसर

2
आप --scriptअपनी नोटबुक की .py प्रतियों को सहेजने के साथ नोटबुक सर्वर शुरू कर सकते हैं । IPython 2.0 में, आप %runएक नोटबुक में सक्षम होंगे । हम अभी भी कोड के पुन: उपयोग के लिए बेहतर तंत्र तैयार कर रहे हैं।
थॉमस के

1
यह उदाहरण दिखाता है कि लिपियों के रूप में डुप्लिकेट निर्यात किए बिना आईपीथॉन नोटबुक को मॉड्यूल के रूप में कैसे आयात किया जाए।
मीनक

जवाबों:


134

नए जुपिटर में यह वास्तव में सरल है:

%run MyOtherNotebook.ipynb

5
% रन MyOtherNotebook.ipynb ने मेरे लिए काम किया। (नहीं '')
फ्लोरियन एच।

6
सावधान रहें, यह विधि पूरी तरह से बच्चे की नोटबुक को चलाएगी। __name__ == '__main__' and '__file__' not in globals()यदि आप बच्चे की नोटबुक में हैं, तो आप सत्यापित करने के लिए एक चेक जोड़ सकते हैं । ( blog.sicara.com/… से )
फ़्लावियन हतोबिस

8
% 'MyOtherNotebook.ipynb' ERROR: रूट: फ़ाइल u'MyOtherNotebook.ipynb.py'नहीं मिली।
user3673

1
@ Kocur4d फिक्सिंग के लिए धन्यवाद! जब मैंने इसे आज़माया तो दिलचस्प रूप से यह मेरे लिए (उद्धरण के साथ) काम कर गया, लेकिन प्रलेखन में उदाहरणों में कोई उद्धरण नहीं है।
जॉन्डोडो

3
अगर कोई भी उस पार आता है, तो आप% रन "/path/to/my/file/notebook.ipynb" जैसे पूर्ण पथ का उपयोग भी कर सकते हैं
जेरेमी

37

आप आयात करना चाहते हैं A.ipynbमें B.ipynbलिखने

import import_ipynb
import A

में है B.ipynb

import_ipynbमैंने जो मॉड्यूल बनाया है वह पाइप के माध्यम से स्थापित किया गया है:

pip install import_ipynb

यह सिर्फ एक फ़ाइल है और यह कड़ाई से आधिकारिक रूप से ज्यूपिटर साइट का पालन ​​करता है ।

पुनश्च यह भी तरह बातें का समर्थन करता है from A import foo, from A import *आदि


@ क्रश pip install import-ipynbभी बस एक ही पैकेज पर काम करता है और स्थापित करता है, लेकिन चूंकि अजगर आपको लिखने की अनुमति नहीं देगा import import-ipynbऔर यह सिर्फ एक फ़ाइल पर विचार करने के pip install import_ipynbलिए, मेरे लिए अधिक सुसंगत दिखता है।
axil

3
क्या कोई अंतर है import nbimporterऔर import import_ipynb?
फ्रैक्टेल

1
यह मेरे जुपिटर में पायथन 3 के साथ बिल्कुल भी काम नहीं करता है
सेबेस्टिअलोनो

@ सेबैस्टियलोनो वास्तव में क्या काम नहीं करता है? वर्णन करें कि आप क्या करते हैं और आप क्या त्रुटि संदेश देखते हैं। आदर्श रूप से जीथब पर टिकट खोलें।
axil

@ मेरे पास एक ही त्रुटि है जहां यह मेरे लिए Py3 में काम नहीं करता है। यह मुझे निम्नलिखित त्रुटि देता है - ModuleNotFoundError: 'A' PS नाम का कोई भी मॉड्यूल नहीं: A.ipynb एक ही फ़ोल्डर में मौजूद है
Soman Dubey

11

Daud

!pip install ipynb

और उसके बाद अन्य नोटबुक आयात करें

from ipynb.fs.full.<notebook_name> import *

या

from ipynb.fs.full.<notebook_name> import <function_name>

सुनिश्चित करें कि सभी नोटबुक एक ही निर्देशिका में हैं।

संपादन 1: आप यहाँ आधिकारिक दस्तावेज देख सकते हैं - https://ipynb.readthedocs.io/en/stable/

इसके अलावा, यदि आप नोटबुक से केवल कक्षा और फ़ंक्शन परिभाषाएँ आयात करना चाहते हैं (और शीर्ष स्तर के बयान नहीं), तो आप ipynb.fs.defsइसके बजाय उपयोग कर सकते हैं ipynb.fs.full। पूर्ण अपरकेस चर असाइनमेंट का मूल्यांकन किया जाएगा।


अगर मेरे फ़ाइल नाम में व्हाट्सएप है तो क्या होगा?
समीह

यह सलाह दी जाती है कि किसी भी
व्हाट्सएप

2
ध्यान दें कि वर्णित दोनों मामलों में, आयातित नोटबुक को पूर्ण रूप से निष्पादित किया गया है। ipynbपैकेज भी केवल परिभाषाओं के आंशिक निष्पादन का समर्थन करता है। यह IPyton द्वारा एक आधिकारिक पैकेज है, इसलिए मेरा मानना ​​है कि यह स्वीकृत उत्तर होना चाहिए।
amka66

क्या यह किसी फ़ोल्डर के अंदर नोटबुक आयात कर सकता है? उदाहरण के लिएMyFolder/book.ipynb
हड्डियों 225

यह अच्छा लग रहा था, लेकिन जब यह% matplotlib इनलाइन का सामना करता है, तो गिर जाता है ....
jtlz2

7

अपने कमांड प्रॉम्प्ट से ipynb इंस्टॉल करें

pip install import-ipynb

अपनी नोटबुक फ़ाइल में आयात करें

import import_ipynb

अब अपनी फ़ाइल आयात करने के लिए नियमित आयात कमांड का उपयोग करें

import MyOtherNotebook

सबसे सरल अभी तक समझाने वाला उत्तर। धन्यवाद!
गरीब यहूदी

क्या इसके लिए निर्देशिका की आवश्यकता होती है, जहां नोटबुक को आयात किया जाना है, एक init .py है?
ल्यूक एरोन

3

आप import nbimporterतब उपयोग कर सकते हैंimport notebookName


: +1, nbimporter मेरे लिए एक आकर्षण की तरह काम करता है, यह भी स्थापित किया जा सकता conda का उपयोग करconda install -c conda-forge importnb
Zuku

2

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

  1. PY फ़ाइल स्वरूप में अपनी नोटबुक से उस फ़ाइल को डाउनलोड करें (आप फ़ाइल टैब में वह विकल्प पा सकते हैं)।
  2. अब उस डाउनलोड की गई फ़ाइल को जूपिटर नोटबुक की कार्यशील निर्देशिका में कॉपी करें
  3. अब आप इसका उपयोग करने के लिए तैयार हैं। बस आयात .PY फ़ाइल ipynb फ़ाइल में

हम्म ... मैंने callee.py फ़ाइल में callee.ipync को रूपांतरित किया और फिर caller.ipync के साथ उसी फ़ोल्डर के अंतर्गत नोटबुक पर callee.py फ़ाइल अपलोड की, और caller.ipync में मैंने अभी लिखा import callee, बस नहीं कर सका काम।
एल्सा लिन

ps IPython संस्करण है: 5.1.0।
एल्सा लिन

1

मुद्दा यह है कि नोटबुक एक सादा अजगर फ़ाइल नहीं है। .ipynbफ़ाइल आयात करने के चरण निम्नलिखित में उल्लिखित हैं: नोटबुक आयात करना

मैं कोड चिपका रहा हूं, इसलिए यदि आपको इसकी आवश्यकता है ... तो आप बस एक त्वरित कॉपी और पेस्ट कर सकते हैं। ध्यान दें कि अंत में मेरा import primesकथन है। आपको इसे बदलना होगा। मेरी फ़ाइल का नाम हैprimes.ipynb । इस बिंदु से आप उस फ़ाइल के अंदर की सामग्री का उपयोग कर सकते हैं जैसा कि आप नियमित रूप से करते हैं।

काश एक सरल विधि होती, लेकिन यह डॉक्स से सीधी है।
नोट: मैं ज्यूपिटर का उपयोग कर रहा हूं न कि आईपीथॉन का।

import io, os, sys, types
from IPython import get_ipython
from nbformat import current
from IPython.core.interactiveshell import InteractiveShell


def find_notebook(fullname, path=None):
    """find a notebook, given its fully qualified name and an optional path

    This turns "foo.bar" into "foo/bar.ipynb"
    and tries turning "Foo_Bar" into "Foo Bar" if Foo_Bar
    does not exist.
    """
    name = fullname.rsplit('.', 1)[-1]
    if not path:
        path = ['']
    for d in path:
        nb_path = os.path.join(d, name + ".ipynb")
        if os.path.isfile(nb_path):
            return nb_path
        # let import Notebook_Name find "Notebook Name.ipynb"
        nb_path = nb_path.replace("_", " ")
        if os.path.isfile(nb_path):
            return nb_path


class NotebookLoader(object):
    """Module Loader for Jupyter Notebooks"""
    def __init__(self, path=None):
        self.shell = InteractiveShell.instance()
        self.path = path

    def load_module(self, fullname):
        """import a notebook as a module"""
        path = find_notebook(fullname, self.path)

        print ("importing Jupyter notebook from %s" % path)

        # load the notebook object
        with io.open(path, 'r', encoding='utf-8') as f:
            nb = current.read(f, 'json')


        # create the module and add it to sys.modules
        # if name in sys.modules:
        #    return sys.modules[name]
        mod = types.ModuleType(fullname)
        mod.__file__ = path
        mod.__loader__ = self
        mod.__dict__['get_ipython'] = get_ipython
        sys.modules[fullname] = mod

        # extra work to ensure that magics that would affect the user_ns
        # actually affect the notebook module's ns
        save_user_ns = self.shell.user_ns
        self.shell.user_ns = mod.__dict__

        try:
        for cell in nb.worksheets[0].cells:
            if cell.cell_type == 'code' and cell.language == 'python':
                # transform the input to executable Python
                code = self.shell.input_transformer_manager.transform_cell(cell.input)
                # run the code in themodule
                exec(code, mod.__dict__)
        finally:
            self.shell.user_ns = save_user_ns
        return mod


class NotebookFinder(object):
    """Module finder that locates Jupyter Notebooks"""
    def __init__(self):
        self.loaders = {}

    def find_module(self, fullname, path=None):
        nb_path = find_notebook(fullname, path)
        if not nb_path:
            return

        key = path
        if path:
            # lists aren't hashable
            key = os.path.sep.join(path)

        if key not in self.loaders:
            self.loaders[key] = NotebookLoader(path)
        return self.loaders[key]

sys.meta_path.append(NotebookFinder())

import primes

1

मौजूदा या नए पायथन मॉड्यूलों के साथ जुपिटर का उपयोग करने में कोई समस्या नहीं है। Jupyter के चलने के साथ, बस एक .py फ़ाइल में अपने मॉड्यूल वर्ग की स्थितियों को बनाने / संशोधित करने के लिए स्पाइडर (या अपनी पसंद के किसी भी संपादक) को आग लगा दें, और फिर Jupyter में आवश्यकतानुसार मॉड्यूल आयात करें।

एक चीज जो इसे वास्तव में निर्बाध बनाती है, वह है ऑटोरेलोड मैजिक एक्सटेंशन का उपयोग करना। आप यहाँ ऑटोरेलोएड के लिए प्रलेखन देख सकते हैं:

http://ipython.readthedocs.io/en/stable/config/extensions/autoreload.html

यहां किसी भी समय संशोधित किए गए मॉड्यूल को स्वचालित रूप से पुनः लोड करने का कोड है:

# autoreload sets up auto reloading of modified .py modules
import autoreload
%load_ext autoreload
%autoreload 2

ध्यान दें कि मैंने लोडिंग .ipynb फ़ाइलों को मॉड्यूल के रूप में अनुकरण करने के लिए एक पूर्व उत्तर में वर्णित कोड की कोशिश की, और इसे काम करने के लिए मिला, लेकिन जब आप .ipynb फ़ाइल में परिवर्तन करते हैं तो यह चुटकियों में हो जाता है। ऐसा लगता है कि आपको .ipynb 'मॉड्यूल' को फिर से लोड करने के लिए जुपिटर के विकास के माहौल को फिर से शुरू करने की आवश्यकता है, जो मुझे स्वीकार्य नहीं था क्योंकि मैं अपने कोड में बहुत सारे बदलाव कर रहा हूं।


0

कृपया सुनिश्चित करें कि आप भी जोड़ते हैं __init__.py पैकेज में फ़ाइल जहाँ आपकी सभी अन्य .ipynb फाइलें स्थित हैं।

यह nbviewer लिंक के अतिरिक्त है जो ऊपर minrkऔर syiप्रदान किया गया है।

मुझे भी कुछ इसी तरह की समस्या थी और तब मैंने इसका हल लिखा और साथ ही अपने पब्लिक गूगल ड्राइव फोल्डर का लिंक भी दिया, जिसका एक वर्किंग उदाहरण है :)

कदम प्रयोग और समाधान के साथ कदम के साथ मेरा Stackoverflow पोस्ट:

Jupyter Notebook: .ipynb फ़ाइल आयात करें और इसे अन्य .ipynb फ़ाइल में त्रुटि देने की विधि तक पहुँचें

आशा है कि इससे दूसरों को भी मदद मिलेगी। सबको शुक्रीया!


0

% रन YourNotebookfile.ipynb ठीक काम कर रहा है;

यदि आप किसी विशिष्ट मॉड्यूल को आयात करना चाहते हैं, तो ipynb के बाद आयात कमांड जोड़ें अर्थात YourNotebookfile.ipynb में डिफ ऐड () होने के बाद

तो आप बस इसका उपयोग कर सकते हैं

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