다른 ipynb 파일에서 ipynb 파일을 가져오시겠습니까?
인터랙티브 파이썬(ipython)은 정말 놀랍습니다. 특히 당신이 즉석에서 물건을 조립하고 있기 때문에...그리고 쉽게 돌아갈 수 있는 방식으로 그것을 합니다.
하지만 흥미로운 것은 여러 개의 ipython 노트북(ipynb 파일)을 가지고 있는 사용 사례입니다.다른 ipynb 파일을 가져오고 싶다는 점을 제외하고는 노트북이 다른 노트북과 관계를 맺으면 안 되는 것으로 보입니다.
해결 방법은 *.ipynb 파일을 *.py 파일로 변환하여 노트북으로 가져올 수 있습니다.하나의 파일이 프로젝트의 모든 것을 보유하는 것은 좀 이상합니다. 특히 코드 재사용을 정말로 추진하고 싶다면 말입니다(그것은 파이썬의 핵심 신조가 아닙니까?).
내가 뭘 빼놓았나요?ipython 노트북 사용 사례가 지원되지 않습니까?ipynb 파일을 다른 노트북으로 가져오는 데 사용할 수 있는 다른 솔루션이 있습니까?ipynb를 계속 사용하고 싶지만, 지금 제 작업 흐름을 정말 엉망으로 만들고 있습니다 :(
그것은 새로운 목성에서 정말 간단합니다.
%run MyOtherNotebook.ipynb
공식 문서: IPython 매직 명령
명령 프롬프트에서 도우미 라이브러리 설치:
pip install import-ipynb
노트북에서 가져오기:
import import_ipynb
이제 .ipynb 노트북을 .py 파일처럼 가져옵니다.
import TheOtherNotebook
것이.python-ipynb
모듈은 하나의 파일일 뿐이며 주피터 사이트에서 공식적인 방법을 엄격하게 준수합니다.
▁ps▁like▁things다▁ps▁supports니▁it도 지원합니다.from A import foo
,from A import *
는 하위와 함께 작동합니다: PPS는 다음과 같습니다.import A.B
달려.
!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
%runNotebookfile.ipynb가 정상적으로 작동합니다.
특정 모듈을 가져오려면 ipynbi.eNotebookfile.ipynb 뒤에 defAdd()가 있는 import 명령을 추가하면 됩니다.
그럼 그냥 사용하시면 됩니다.
%run YourNotebookfile.ipynb import Add
위에 언급된 의견은 매우 유용하지만 구현하기가 조금 어렵습니다.시도할 수 있는 단계 아래에서 저도 시도해 보았는데 효과가 있었습니다.
- 노트북에서 파일을 PY 파일 형식으로 다운로드합니다(파일 탭에서 해당 옵션을 찾을 수 있습니다).
- 이제 다운로드한 파일을 주피터 노트북의 작업 디렉토리에 복사합니다.
- 이제 사용할 준비가 되었습니다..PY 파일을 ipynb 파일로 가져오기만 하면 됩니다.
사용할 수 있습니다.import nbimporter
그리고나서import notebookName
문제는 노트북이 일반 파이썬 파일이 아니라는 점입니다.를 .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
기존 또는 새로운 Python.py 모듈에서 Jupyter를 사용하는 데 전혀 문제가 없습니다.Jupyter를 실행할 때 Spyder(또는 원하는 편집기)를 실행하여 .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 'module'을 다시 로드하려면 Jupyter 개발 환경을 다시 시작해야 할 것 같습니다. .ipynb 'module'은 제가 코드를 많이 변경하고 있기 때문에 받아들일 수 없었습니다.
다음 항목도 추가해야 합니다.__init__.py
다른 모든 .ipynb 파일이 있는 패키지의 파일입니다.
은 "nbviewer"라는 입니다.minrk
그리고.syi
상기의
저도 비슷한 문제가 좀 있었는데 해결책과 함께 제 공용 구글 드라이브 폴더에 대한 링크를 작성했습니다. 이 폴더에는 작동 예가 있습니다. :)
단계별 실험 및 솔루션을 통한 My Stack 오버플로 게시물:
주피터 노트북:.ipynb 파일을 가져와서 다른 .ipynb 파일의 메서드에 액세스하면 오류가 발생합니다.
이것이 다른 사람들에게도 도움이 되기를 바랍니다.모두 감사합니다!
'%runchildNotebook.ipynb' 명령은 매우 간단하고 유용한 솔루션이지만(이전 답변에서 언급했듯이), 하위 파일에서도 다른 '%rungrandChildNotebook.ipynb'를 사용하지만 다른 디렉터리에 있을 때는 사용에 주의해야 합니다!파일이 중복 실행될 수 있으며 오류가 발생하기 쉽습니다(자녀가 더 이상 부모와 동일한 경로를 사용하지 않는 반면 주피터는 실행 중에 그렇게 가정합니다!).
위에서 언급한 문제를 해결하기 위한 한 가지 해결책은 다음과 같습니다. 파일을 가져오기 직전에 현재 디렉터리가 어디에 있는지 먼저 확인한 다음 이를 기반으로 작업하십시오.다음은 예입니다.
if 'myFolder' in os.getcwd():
%run graindChildNotebook.ipynb
else:
%run myFolder/grandChildNotebook.ipynb
위의 예에서는 먼저 'myFolder' 디렉토리에 있는지 확인합니다.그렇다면 '손자 노트북'이 같은 디렉터리에 있고 정상적으로 실행하기에 충분하다는 것을 알게 될 것입니다.그렇지 않으면 이 파일이 있는 폴더의 이름을 추가하여 실행해야 합니다.
이것은 단지 예시일 뿐이며, 당신은 당신의 사례를 바탕으로 개인화된 해결책을 수행해야 합니다.
언급URL : https://stackoverflow.com/questions/20186344/importing-an-ipynb-file-from-another-ipynb-file
'programing' 카테고리의 다른 글
ActiveSheet(액티브 시트) 또는 Select(선택)를 사용하지 않고 여러 시트를 동시에 PDF로 내보내기 (0) | 2023.06.13 |
---|---|
워드프레스 웹사이트에서 REST API를 활성화하려면 어떻게 해야 합니까? (0) | 2023.06.08 |
파이썬의 복소수 (0) | 2023.06.08 |
WidgetFlutterBinding.에서 보장하는 사항이니셜라이즈() do? (0) | 2023.06.08 |
유형 스크립트의 열거형 대 상수 차이 (0) | 2023.06.08 |