
jupyter notebook 文件(`.ipynb`)本身不能被直接作为模块导入;必须将类定义移至 `.py` 文件中,再通过标准 python 导入机制使用。
在 Jupyter 中开发时,常会误以为 .ipynb 文件像普通 Python 模块一样可被 import —— 但实际上,Jupyter Notebook 是基于 JSON 的交互式文档格式,并非合法的 Python 模块。当你执行 from rentalcar import rentalcar 时,Python 解释器会在 sys.path 中查找名为 rentalcar.py 的模块,而不会识别或加载 rentalcar.ipynb。
✅ 正确做法如下:
-
将类导出为 .py 文件
打开 rentalcar.ipynb,复制其中 class rentalcar: 及其依赖代码(如导入语句、辅助函数等),粘贴到新文件 rentalcar.py 中,并保存在与 customer.ipynb 同一目录下(或确保该路径已加入 sys.path)。# rentalcar.py from datetime import datetime class rentalcar: def __init__(self, model, daily_rate): self.model = model self.daily_rate = daily_rate def calculate_cost(self, days): return self.daily_rate * days -
在 customer.ipynb 中正常导入
from datetime import datetime from rentalcar import rentalcar # ✅ 现在可成功导入 class Customer: def __init__(self, name, rental_company): self.name = name self.rental_company = rental_company # 示例使用 car = rentalcar("Toyota Camry", 45.0) print(f"3-day rental cost: ${car.calculate_cost(3)}")
⚠️ 注意事项:
- 确保 rentalcar.py 与 customer.ipynb 位于相同工作目录(可通过 !pwd 或 os.getcwd() 查看);
- 若修改了 rentalcar.py,在 Jupyter 中需重新运行 import 语句(推荐配合 importlib.reload 避免内核缓存问题):
import importlib import rentalcar importlib.reload(rentalcar)
- 不建议用 %run rentalcar.ipynb 替代导入——它仅执行代码,不创建可复用的模块命名空间,且无法跨 notebook 共享类定义。
? 总结:Jupyter 是探索和演示工具,而模块化开发应遵循 Python 工程规范——将可复用逻辑封装进 .py 文件。这是兼顾交互性与可维护性的最佳实践。










