[python] ipynb는 다른 ipynb 파일을 가져옵니다.

인터랙티브 파이썬 (ipython)은 정말 놀랍습니다. 특히 여러분이 즉석에서 함께 연결하고 … 돌아 가기 쉬운 방식으로 수행 할 때 특히 그렇습니다.

그러나 흥미로운 것은 여러 개의 ipython 노트북 (ipynb 파일)을 사용하는 경우입니다. 다른 ipynb 파일을 가져 오는 것을 좋아한다는 점을 제외하고는 노트북이 다른 노트북과 관계가 없어야하는 것 같습니다.

내가 보는 유일한 해결 방법은 내 * .ipynb 파일을 * .py 파일로 변환 한 다음 내 노트북으로 가져올 수 있습니다. 하나의 파일이 프로젝트의 모든 것을 보유하는 것은 약간 이상합니다. 특히 코드 재사용을 정말로 추진하고 싶다면 (파이썬의 핵심 신조가 아닙니까?)

내가 뭔가를 놓치고 있습니까? ipython 노트북에서 지원되는 사용 사례가 아닙니까? ipynb 파일을 다른 노트북으로 가져 오는 데 사용할 수있는 다른 솔루션이 있습니까? ipynb를 계속 사용하고 싶지만 지금 당장 내 워크 플로를 엉망으로 만들고 있습니다.



답변

최신 Jupyter에서는 정말 간단합니다.

%run MyOtherNotebook.ipynb


답변

당신은 가져올 경우 A.ipynbB.ipynb쓰기

import import_ipynb
import A

에서 B.ipynb.

import_ipynb제작 한 모듈은 PIP를 통해 설치됩니다

pip install import_ipynb

그것은 단지 하나의 파일이며 jupyter 사이트 의 공식 하우투 를 엄격히 준수합니다 .

PS 또한 같은 것들을 지원 from A import foo, from A import *


답변

운영

!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. 전체 대문자 변수 할당도 평가됩니다.


답변

명령 프롬프트에서 ipynb 설치

pip install import-ipynb

노트북 파일에서 가져 오기

import import_ipynb

이제 일반 가져 오기 명령을 사용하여 파일을 가져옵니다.

import MyOtherNotebook


답변

import nbimporter그런 다음 사용할 수 있습니다.import notebookName


답변

위에서 언급 한 주석은 매우 유용하지만 구현하기가 약간 어렵습니다. 시도해 볼 수있는 단계 아래에서도 시도해 보았습니다.

  1. 노트북에서 PY 파일 형식으로 해당 파일을 다운로드합니다 (파일 탭에서 해당 옵션을 찾을 수 있음).
  2. 이제 다운로드 한 파일을 Jupyter Notebook의 작업 디렉토리에 복사합니다.
  3. 이제 사용할 준비가되었습니다. .PY 파일을 ipynb 파일로 가져 오기만하면됩니다.


답변

문제는 노트북이 일반 파이썬 파일이 아니라는 것입니다. .ipynb파일 을 가져 오는 단계 는 다음과 같습니다. 노트북 가져 오기

코드를 붙여넣고 있으므로 필요한 경우 간단히 복사하여 붙여 넣을 수 있습니다. 마지막에 나는 import primes진술 이 있음을 주목하라 . 물론 변경해야합니다. 내 파일의 이름은입니다 primes.ipynb. 이 시점부터 정기적으로 하듯이 해당 파일 내의 콘텐츠를 사용할 수 있습니다.

더 간단한 방법이 있었으면 좋겠지 만 이것은 문서에서 직접 가져온 것입니다.
참고 : ipython이 아닌 jupyter를 사용하고 있습니다.

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