Das Problem ist, dass ein Notizbuch keine einfache Python-Datei ist. Die Schritte zum Importieren der .ipynb
Datei werden im Folgenden beschrieben: Importieren des Notizbuchs
Ich füge den Code ein. Wenn Sie ihn benötigen, können Sie ihn einfach kopieren und einfügen. Beachten Sie, dass ich am Ende die import primes
Aussage habe. Das musst du natürlich ändern. Der Name meiner Datei ist primes.ipynb
. Ab diesem Zeitpunkt können Sie den Inhalt dieser Datei wie gewohnt verwenden.
Ich wünschte, es gäbe eine einfachere Methode, aber diese stammt direkt aus den Dokumenten.
Hinweis: Ich verwende Jupyter, nicht Ipython.
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
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)
with io.open(path, 'r', encoding='utf-8') as f:
nb = current.read(f, 'json')
mod = types.ModuleType(fullname)
mod.__file__ = path
mod.__loader__ = self
mod.__dict__['get_ipython'] = get_ipython
sys.modules[fullname] = mod
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':
code = self.shell.input_transformer_manager.transform_cell(cell.input)
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:
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