인터랙티브 파이썬 (ipython)은 정말 놀랍습니다. 특히 여러분이 즉석에서 함께 연결하고 … 돌아 가기 쉬운 방식으로 수행 할 때 특히 그렇습니다.
그러나 흥미로운 것은 여러 개의 ipython 노트북 (ipynb 파일)을 사용하는 경우입니다. 다른 ipynb 파일을 가져 오는 것을 좋아한다는 점을 제외하고는 노트북이 다른 노트북과 관계가 없어야하는 것 같습니다.
내가 보는 유일한 해결 방법은 내 * .ipynb 파일을 * .py 파일로 변환 한 다음 내 노트북으로 가져올 수 있습니다. 하나의 파일이 프로젝트의 모든 것을 보유하는 것은 약간 이상합니다. 특히 코드 재사용을 정말로 추진하고 싶다면 (파이썬의 핵심 신조가 아닙니까?)
내가 뭔가를 놓치고 있습니까? ipython 노트북에서 지원되는 사용 사례가 아닙니까? ipynb 파일을 다른 노트북으로 가져 오는 데 사용할 수있는 다른 솔루션이 있습니까? ipynb를 계속 사용하고 싶지만 지금 당장 내 워크 플로를 엉망으로 만들고 있습니다.
답변
최신 Jupyter에서는 정말 간단합니다.
%run MyOtherNotebook.ipynb
답변
당신은 가져올 경우 A.ipynb
에 B.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
답변
위에서 언급 한 주석은 매우 유용하지만 구현하기가 약간 어렵습니다. 시도해 볼 수있는 단계 아래에서도 시도해 보았습니다.
- 노트북에서 PY 파일 형식으로 해당 파일을 다운로드합니다 (파일 탭에서 해당 옵션을 찾을 수 있음).
- 이제 다운로드 한 파일을 Jupyter Notebook의 작업 디렉토리에 복사합니다.
- 이제 사용할 준비가되었습니다. .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