如何在Jupyter Notebook开头指定Python版本以保证分析可复现
解决方案
首先明确:Jupyter内核是在打开Notebook加载的时候就已经启动运行的,无法在单元格执行过程中直接替换当前正在运行的内核版本,不过可以通过以下两个无外部操作的方案满足复现需求:
方案1:版本强制校验(最稳妥,零额外依赖)
直接在第一个单元格加入Python版本校验逻辑,版本不匹配时直接抛出错误终止运行,避免用错版本跑出无效结果,同时后续紧跟依赖包的固定版本安装命令。
代码示例如下:
import sys # 在这里修改为你需要的Python版本号 REQUIRED_PYTHON_MAJOR = 3 REQUIRED_PYTHON_MINOR = 9 if (sys.version_info.major != REQUIRED_PYTHON_MAJOR or sys.version_info.minor != REQUIRED_PYTHON_MINOR): raise RuntimeError( f"当前Notebook要求使用Python {REQUIRED_PYTHON_MAJOR}.{REQUIRED_PYTHON_MINOR} 版本\n" f"当前运行的Python版本为 {sys.version.split()[0]}\n" "请切换对应内核后再运行后续代码" ) # 后续直接加你原来的固定版本依赖安装命令 !pip install allennlp==2.3 # 其他依赖安装命令...
这个方案完全不需要你或者共同作者做任何Notebook外的手动操作,打开后运行第一个单元格就会自动校验版本、安装对应依赖,版本不对会直接提示,不会出现跑了半天发现版本用错的问题。
方案2:自动创建对应版本环境(适合所有协作者都用conda的场景)
如果你们统一用conda管理环境,可以在第一个单元格自动创建指定Python版本的隔离环境、注册为Jupyter内核,第一次运行完成后刷新页面选择对应内核即可,后续不需要重复操作:
import os import sys REQUIRED_PYTHON_VERSION = "3.9" ENV_NAME = "notebook-py39" # 检查环境是否存在,不存在则创建 if os.popen(f"conda env list | grep {ENV_NAME}").read().strip() == "": !conda create -y -n {ENV_NAME} python={REQUIRED_PYTHON_VERSION} ipykernel !conda run -n {ENV_NAME} python -m ipykernel install --user --name {ENV_NAME} --display-name "Python (notebook-py39)" # 校验版本 if sys.version.split()[0].startswith(REQUIRED_PYTHON_VERSION): # 安装对应版本依赖 !pip install allennlp==2.3 else: raise RuntimeError(f"请刷新页面,选择内核「Python (notebook-py39)」后重新运行")
内容的提问来源于stack exchange,提问作者captain
相关产品推荐
相关产品推荐

