如何在Jupyter Notebook中导入另一个完整的ipynb文件
解决方案
问题1:导入后无响应本质是输入阻塞
你提供的adivinhacao.ipynb中存在顶层input()语句,Python导入模块时会默认执行文件内所有未封装的顶层代码,运行到input()时会进入静默等待输入状态,你看到的「无响应」实际是程序在等待你输入难度参数:
- 可以在导入代码的输出框直接输入1/2/3任意难度值,程序就会继续执行
- 如果你希望导入时不自动执行业务逻辑,仅在需要时手动触发运行,将
adivinhacao.ipynb的代码封装为函数并添加入口判断:
import random def jogar(): aleatorio = random.randrange(1,101) tentativas = 0 rodada = 1 pontos = 1000 print(aleatorio) # Para selecionar o nível de dificuldade do jogo print("Escolha o nível de dificuldade") print("(1) Fácil, (2) Médio, (3) Difícil") nivel = int(input("Digite o nível: ")) if(nivel == 1): tentativas = 10 elif(nivel == 2): tentativas = 5 else: tentativas = 3 #(more code) # 仅直接运行当前文件时才执行jogar(),导入时不自动运行 if __name__ == "__main__": jogar()
修改后jogos.ipynb的调用逻辑调整为:
!pip install import-ipynb import import_ipynb import adivinhacao # 需要运行游戏时主动调用函数 adivinhacao.jogar()
问题2:修改文件后导入无变化是模块缓存导致
Python导入模块后会自动缓存模块内容,你修改adivinhacao.ipynb后重复执行import adivinhacao不会加载更新后的内容,需要手动重载模块:
import importlib importlib.reload(adivinhacao)
极端情况修复方案
如果以上操作仍无效,按以下步骤执行:
- 关闭两个ipynb文件对应运行中的内核
- 进入Jupyter工作目录,删除根目录下的
__pycache__文件夹 - 重新启动内核,运行导入代码即可
内容的提问来源于stack exchange,提问作者Marcelo Wieczorek
相关产品推荐
相关产品推荐

