ipynb আরেকটি আইপিনব ফাইল আমদানি করে


99

ইন্টারেক্টিভ পাইথন (আইপিথন) কেবল আশ্চর্যজনক, বিশেষত যখন আপনি ফ্লাইতে একসাথে জিনিসগুলি পাইকেন ... এবং এটি এমনভাবে করেন যাতে ফিরে যাওয়া সহজ হয়।

তবে, আকর্ষণীয় বলে মনে হচ্ছে হ'ল একাধিক আইপিথন নোটবুক (আইপিনব ফাইল) রাখার ব্যবহার। আপাতদৃষ্টিতে মনে হচ্ছে নোটবুকের অন্যান্য নোটবুকের সাথে সম্পর্ক থাকার কথা নয়, যা বোধগম্য হয়, এ ছাড়া আমি অন্যান্য আইপিনব ফাইলগুলি আমদানি করতে পছন্দ করব।

আমি দেখতে পেলাম একমাত্র কাজটি হল আমার * .ipynb ফাইলগুলিকে * .py ফাইলগুলিতে রূপান্তর করা, যা আমার নোটবুকে আমদানি করা যায়। একটি প্রকল্পে একটি ফাইল হ'ল কিছুটা অদ্ভুত, বিশেষত যদি আমি কোড-পুনঃব্যবহারের জন্য সত্যিই চাপ দিতে চাই (এটি কি পাইথনের মূল তত্ত্ব নয়?)।

আমি কিছু অনুপস্থিত করছি? এটি কি আইপথন নোটবুকগুলির সমর্থিত ব্যবহারের কেস নয়? আইপিনব ফাইলটি অন্য নোটবুকে এই আমদানির জন্য আমি ব্যবহার করতে পারি এমন আরও কি কোনও সমাধান আছে? আমি আইপিনব ব্যবহার চালিয়ে যেতে চাই, তবে এটি এখনই আমার কর্মপ্রবাহকে জড়িয়ে ফেলছে :(



4
--scriptআপনার নোটবুকের .py কপিগুলি সংরক্ষণ করতে আপনি নোটবুক সার্ভারটি শুরু করতে পারেন । আইপিথন ২.০ এ আপনি %runএকটি নোটবুক সক্ষম করতে পারবেন । আমরা এখনও কোড পুনরায় ব্যবহারের জন্য আরও ভাল পদ্ধতির কাজ করছি।
থমাস কে

4
এই উদাহরণটি দেখায় যে আইপিথন নোটবুকগুলি কীভাবে স্ক্রিপ্ট হিসাবে সদৃশ রফতানি না করে মডিউল হিসাবে আমদানি করতে হয়।
minrk

stackoverflow.com/q/20186344/478206 , stackoverflow.com/q/19082397/478206 এবং stackoverflow.com/q/19564625/478206 সবাই একই প্রশ্ন জিজ্ঞাসা করছে।
রবি বাসাক

উত্তর:


133

এটি নতুন জুপিটারে সত্যই সহজ:

%run MyOtherNotebook.ipynb

4
% চালিত MyOtherNotebook.ipynb আমার পক্ষে কাজটি করেছে। (না '')
ফ্লোরিয়ান এইচ

6
সতর্কতা অবলম্বন করুন, এই পদ্ধতিটি সম্পূর্ণরূপে চাইল্ড নোটবুকটি চালাবে। আপনি __name__ == '__main__' and '__file__' not in globals()চাইল্ড নোটবুকটিতে আছেন কিনা তা যাচাই করতে আপনি একটি চেক যোগ করতে পারেন । ( ব্লগ.সিকারারা.com /… থেকে )
ফ্ল্যাভিয়ান হাটবোইস

8
% 'MyOtherNotebook.ipynb' চালিত ত্রুটি: মূল: ফাইল u'MyOtherNotebook.ipynb.py'খুঁজে পাওয়া যায় নি।
ব্যবহারকারী 3673

4
@ Kocur4d ঠিক করার জন্য ধন্যবাদ! মজার বিষয় হল এটি চেষ্টা করার সময় এটি আমার পক্ষে যথেষ্ট পরিমাণে (উদ্ধৃতি সহ) কাজ করেছিল, তবে ডকুমেন্টেশনে উদাহরণগুলির কোনও উদ্ধৃতি নেই।
জোহান্দো

4
যদি কেউ এর জুড়ে আসে তবে আপনি% রান "/পাথ /
টু

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আমার কাছে আরও সুসংগত দেখায়।
অক্ষ

4
import nbimporterএবং এর মধ্যে কোন পার্থক্য আছে import import_ipynb?
ফ্র্যাক্টাল


পুনঃটুইট করেছেন আপনি কী করেন এবং কোন ত্রুটি বার্তাগুলি দেখেন তা বর্ণনা করুন। আদর্শভাবে গিথুবে একটি টিকিট খুলুন।
অক্ষ

@axil আমার একই ত্রুটি রয়েছে যেখানে এটি পাই 3 এ আমার জন্য কাজ করে না। এটি আমাকে নিম্নলিখিত ত্রুটিটি দেয় - মডিউল নটফাউন্ড এরির: 'এ' পিএস নামে কোনও মডিউল নেই: একই ফোল্ডারে এ.পিনব উপস্থিত রয়েছে
সোমান দুবে

11

চালান

!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। সম্পূর্ণ বড় বড় ভেরিয়েবল অ্যাসাইনমেন্টটি পাশাপাশি মূল্যায়ন করা হবে।


আমার ফাইলের নামটিতে যদি সাদা জায়গা থাকে তবে কী হবে?
সামেহ

আপনার ফাইলের নাম
ম্যালগো

4
মনে রাখবেন যে বর্ণিত উভয় ক্ষেত্রেই আমদানি করা নোটবুক পুরোপুরি কার্যকর করা হয়। ipynbপ্যাকেজটি কেবল সংজ্ঞাগুলির আংশিক সম্পাদনকে সমর্থন করে। এটি আইফিটনের একটি অফিশিয়াল প্যাকেজ, সুতরাং আমি বিশ্বাস করি এটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
amka66

এই ফোল্ডার মধ্যে নোটবুক আমদানি করতে পারেন? উদাহরণস্বরূপMyFolder/book.ipynb
হাড় 225

এটি দেখতে ভাল লাগছিল কিন্তু যখন এটির মুখোমুখি হয় তখনই পড়ে যায় যেমন% ম্যাটপ্লোটিব ইনলাইন ....
jtlz2

7

আপনার কমান্ড প্রম্পট থেকে আইপিনব ইনস্টল করুন

pip install import-ipynb

আপনার নোটবুক ফাইলটি আমদানি করুন

import import_ipynb

এখন আপনার ফাইলটি আমদানি করার জন্য নিয়মিত আমদানি কমান্ডটি ব্যবহার করুন

import MyOtherNotebook

সর্বাধিক সহজ এখনও উত্তর ব্যাখ্যা। ধন্যবাদ!
দরিদ্র ইহুদী

এটির জন্য কি ডিরেক্টরিটি দরকার যেখানে নোটবুকটি আমদানি করতে হবে সেখানে একটি init .py আছে?
লুক আরন

3

আপনি import nbimporterতারপর ব্যবহার করতে পারেনimport notebookName


+1, এনবিম্পোর্টার আমার জন্য আকর্ষণীয় কাজ করে, এটি কনডা ব্যবহার করেও ইনস্টল করা যেতে পারে:conda install -c conda-forge importnb
জুকু

2

উপরে উল্লিখিত মন্তব্যগুলি খুব কার্যকর তবে সেগুলি প্রয়োগ করা কিছুটা কঠিন। আপনি যে পদক্ষেপগুলি চেষ্টা করতে পারেন তার নীচে, আমি এটিও চেষ্টা করেছিলাম এবং এটি কার্যকর হয়েছিল:

  1. আপনার নোটবুক থেকে সেই ফাইলটি পিওয়াই ফাইল ফর্ম্যাটে ডাউনলোড করুন (ফাইল ট্যাবে আপনি সেই বিকল্পটি খুঁজে পেতে পারেন)।
  2. এখন ডাউনলোড করা ফাইলটি বৃহত্তর নোটবুকের কার্যকারী ডিরেক্টরিতে অনুলিপি করুন
  3. আপনি এখন এটি ব্যবহারের জন্য প্রস্তুত। আইপিএনব ফাইলটিতে কেবল .PY ফাইলটি আমদানি করুন

হুম ... আমি callee.ipync কে Callee.py ফাইলে রূপান্তরিত করেছি, এবং তারপরে calle.ipync সহ একই ফোল্ডারের অধীনে Callee.py ফাইলটি নোটবুকে আপলোড করেছি, এবং caller.ipync-এ আমি লিখেছিলাম import callee, ঠিক পারি নি কাজ।
এলসা লিন

পিপি আইপিথন সংস্করণ: 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

বিদ্যমান বা নতুন পাইথন .পি মডিউলগুলির সাথে জুপিটার ব্যবহার করার ক্ষেত্রে কোনও সমস্যা নেই। জুপিটার চলার সাথে সাথে, স্পাইডারকে (বা আপনার পছন্দের কোনও সম্পাদক) একটি .py ফাইলে আপনার মডিউল বর্গ সংজ্ঞা তৈরি করতে / সংশোধন করতে, এবং তারপরে জুপিটারে প্রয়োজনীয় মডিউলগুলি আমদানি করুন।

এটি সত্যই বিজোড়হীন করে তোলে এমন একটি জিনিস হ'ল স্বয়ংক্রিয়তা জাদু এক্সটেনশনটি ব্যবহার করা। আপনি এখানে অটোরিলোডের জন্য ডকুমেন্টেশন দেখতে পারেন:

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 'মডিউল' পুনরায় লোড করার জন্য আপনাকে Jupyter বিকাশের পরিবেশ পুনরায় চালু করতে হবে যা আমি আমার কোডটিতে প্রচুর পরিবর্তন আনছি বলে এটি আমার কাছে গ্রহণযোগ্য ছিল না।


0

দয়া করে নিশ্চিত হয়ে নিন যে আপনি __init__.pyপ্যাকেজে এমন কোনও ফাইল যুক্ত করেছেন যেখানে আপনার অন্যান্য সমস্ত .ipynb ফাইল রয়েছে।

এই nbviewer লিঙ্ক আছে যা ছাড়াও হয় minrkএবং syiউপরে প্রদান করা হয়েছে।

আমারও তেমন কিছু সমস্যা ছিল এবং তারপরে আমি সমাধানটি লেখার পাশাপাশি আমার সার্বজনীন গুগল ড্রাইভ ফোল্ডারে একটি লিঙ্ক লিখেছিলাম যার একটি কার্যকারী উদাহরণ রয়েছে :)

ধাপে ধাপে পরীক্ষা এবং সমাধান সহ আমার স্ট্যাকওভারফ্লো পোস্ট:

জুপিটার নোটবুক: .ipynb ফাইলটি আমদানি করুন এবং অন্য .ipynb ফাইলটিতে ত্রুটি দেওয়ার ক্ষেত্রে এটির পদ্ধতিতে অ্যাক্সেস করুন

আশা করি এটি অন্যকেও সহায়তা করবে। সবাইকে ধন্যবাদ!


0

% চালান আপনার নোটবুকফিল.আইপিনব ঠিকঠাক কাজ করছে;

যদি আপনি কোনও নির্দিষ্ট মডিউল আমদানি করতে চান তবে কেবল আইপিনবের পরে আমদানি কমান্ড যুক্ত করুন আপনার নিজের নোটবুকফিল.আইপিএনব রয়েছে ডিফ অ্যাড ()

তাহলে আপনি এটি ব্যবহার করতে পারেন

%run YourNotebookfile.ipynb import Add
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.