运行 来自 python 文件的 ipynb 保持导入和变量

Run ipynb from python file keeping imports and variables

我正在尝试在 ipynb 文件中创建一个项目,该文件由 python 脚本访问和执行,以便于创建基于终端的界面。 ipynb 已经很完整了,但是当试图从脚本中执行两个代码单元时,问题就出现了。

我正在使用此代码从 ipynb 文件中提取代码单元:

# Initializing AI iPython Notebook cells and definitions
rawFile = open('Keras Implementation new.ipynb').read()
cells = json.loads(rawFile)
cells = cells["cells"]

codeCells = []
for i in cells:
    if i["cell_type"] == "code":
        codeCells.append(i["source"])

cellDefinitionsRaw = open('Cell Definitions.json').read()
cellDefinitions = json.loads(cellDefinitionsRaw)

我正在使用此代码来测试连续执行两个单元格:

def executeCell(cell):
    for i in cell:
        exec(i)

executeCell(codeCells[0])
executeCell(codeCells[1])

这两个代码单元作为测试执行:

import numpy as np
import pandas as pd

import matplotlib.pyplot as plt

from sklearn.preprocessing import MinMaxScaler

from keras.models import Sequential
from keras.layers import Dense, LSTM, Dropout
from sklearn.metrics import mean_squared_error
dataset = pd.DataFrame(pd.read_csv('AAAU.csv'))
dataset.head()

我收到错误消息,指出未定义 pd。除了将它们包含在基本脚本中之外,有没有办法从 exec 语句中继承导入?因为我认为这个问题也可能会转移到变量上

编辑(答案):

我重新检查了文档,发现可以修改 exec 调用以使用全局变量:

exec(codeCells[i], globals())

并且可以使用以下代码将单元格中的所有代码行附加到单个字符串:

codeCells = []
for i in cells:
    if i["cell_type"] == "code":
        code = ""
        for j in i["source"]:
            code += j
        codeCells.append(code)

而不是这个:

def executeCell(cell):
    for i in cell:
        exec(i)

executeCell(codeCells[0])
executeCell(codeCells[1])

试试这个:

exec(codeCells[0])
exec(codeCells[1])

我 re-checked 查看文档,发现可以修改 exec 调用以使用全局变量:

exec(codeCells[i], globals())

并且可以使用以下代码将单元格中的所有代码行附加到单个字符串:

codeCells = []
for i in cells:
    if i["cell_type"] == "code":
        code = ""
        for j in i["source"]:
            code += j
        codeCells.append(code)