尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Jupyter与ipynb环境搭建指南:内核配置与虚拟环境管理实战

Jupyter与ipynb环境搭建指南:内核配置与虚拟环境管理实战 很多朋友在第一次接触 Python 数据分析或机器学习时都会频繁看到 “Jupyter” 和 “ipynb” 这两个词。有人把 Jupyter 当成一个 Python 开发工具有人把 .ipynb 当成一种特殊文档还有人会在网上搜到一长串 Jupyter 环境搭建教程后被各种命令吓退。这篇文章会通过实际可操作的方式把 Jupyter 环境搭建、ipynb 文件结构、内核Kernel切换、服务配置、常见报错排查一次讲清楚。不管是零基础入门还是已经写过一段时间 Python 想规范化开发环境本文都适用。我先把结论放在前面Jupyter 本质是一个交互式计算平台ipynb 是它的标准文件格式而“配好环境”这件事核心其实是配好 Python 解释器与 Jupyter 内核的对应关系。如果你能把这句话理解透后面的配置操作就不再是背命令而是有逻辑地管理开发环境。1. Jupyter 与 ipynb 核心概念详解1.1 什么是 Jupyter它解决什么问题Jupyter 是一个开源的交互式计算工具集合。它的前身是 IPython Notebook后来演化为支持多种编程语言的 Jupyter 生态。你经常听到的 Jupyter Notebook、JupyterLab都属于 Jupyter 生态的图形化操作界面。Jupyter 解决的核心问题是把代码、运行结果、图表、文字说明整合到同一个编辑环境中。传统的 Python 开发流程通常是写一个 .py 文件、保存、运行整个脚本、看终端输出。如果代码中间报错你需要来回修改每次重新运行整个脚本。这在探索性数据分析或者算法调试场景下非常低效。Jupyter 允许你把代码拆分成一个个独立的单元格Cell每个单元格可以单独运行、单独查看输出。写一段代码、立刻看到结果、根据结果调整下一步这种“交互式探索”体验让 Jupyter 成为数据分析、机器学习、教学演示等场景的常用选择。如果你做的是大型软件工程项目需要完整的模块化、自动化测试、代码评审Jupyter 并不是主力更适合用 PyCharm 或 VS Code 配合 .py 工程结构。而如果你做的是数据分析报告、算法原型验证、教学示例Jupyter ipynb 是正确的选择。1.2 什么是 ipynb 文件ipynb 全称是 IPython Notebook是 Jupyter Notebook 使用的标准文件格式。你可以把一个 .ipynb 文件理解成一个“有结构的 JSON 文档”。它内部不仅保存代码还保存每个单元格的运行顺序、输出内容、Markdown 文本、绘图结果等。正因为它基于 JSON 结构化存储GitHub 和许多在线平台都支持直接渲染 .ipynb 文件。一个 ipynb 文件内部通常包含以下主要字段cells所有单元格的列表每个单元格包含类型和内容。metadata文件的元信息包括内核信息、语言信息等。nbformat文件格式版本号。nbformat_minor格式的次要版本号。ipynb 文件虽然以 JSON 格式保存但你平时日常操作时不需要直接手动编写 JSON。Jupyter 界面的单元格编辑会自动生成和更新这些内容。1.3 Jupyter 家族常见概念区分很多初学者会混淆 Jupyter Notebook、JupyterLab、IPython。下面用一个表格快速区分名称定位常见后缀IPython增强版 Python 交互式解释器无特定文件Jupyter Notebook基于浏览器的交互式笔记本工具经典版本.ipynbJupyterLabJupyter 的下一代集成界面功能更丰富.ipynbJupyter Kernel负责执行代码的计算引擎无文件以进程方式存在简言之IPython 是交互式解释器Jupyter Notebook 和 JupyterLab 是客户端界面Kernel 是真正执行代码的后端进程。你在界面上点击“运行”代码会被发送到 Kernel 进程由 Kernel 执行后返回结果到界面。1.4 为什么必须关注 Jupyter 环境Jupyter 安装本身并不复杂但环境问题却是高频踩坑点。因为 Jupyter 默认会使用启动时的 Python 环境而很多人的电脑上有多个 Python 版本、虚拟环境、Anaconda 环境。你启动 Jupyter 后可能装了某个包却导入失败大概率就是 Kernel 指向的 Python 环境和你安装包的环境不一致。因此配 Jupyter 环境核心是搞清楚三个问题Jupyter 本身安装在哪个环境。Kernel 使用的 Python 解释器是哪个环境。你的依赖包安装到哪个环境。把这三个问题理清Jupyter 环境配置就成功了一半。2. 环境准备安装方式与版本说明2.1 操作系统与版本说明Jupyter 可以运行在 Windows、macOS、Linux 上。本文示例以 Windows 环境为主macOS 和 Linux 命令基本一致只是路径和部分系统命令有差异。版本方面需要根据你的项目实际情况调整建议使用较新的稳定版本。本文重点演示配置思路不把某个具体版本写死因为 Python 和 Jupyter 的版本更新较快。2.2 安装方式选型Anaconda、Miniconda、pip安装 Jupyter 主要有三种方式各有适用场景安装方式适用场景优点缺点Anaconda 全家桶新手入门、数据分析、机器学习自带 Python、Jupyter、常用包安装体积大Miniconda 手动安装 Jupyter有一定基础、想精细控制环境体积小环境管理灵活需要手动装包系统 Python pip 安装 Jupyter已经使用系统 Python利用现有环境命令简单环境隔离性弱2.3 Anaconda 安装步骤如果不想折腾 Python 环境建议安装 Anaconda。它是 Anaconda 公司推出的发行版内置了 Python、conda 包管理器、Jupyter Notebook、JupyterLab 以及大量数据科学常用库。从 Anaconda 官网下载对应系统的安装包双击安装。安装过程中有一个重要选项是否将 Anaconda 添加到 PATH 环境变量。新版本安装器默认不勾选这里建议手动勾选方便后面在终端使用 conda、jupyter 命令。如果你担心影响系统原有 Python可以不勾选但后面使用需要通过“Anaconda Prompt”进入。安装完成后打开终端验证conda --version python --version jupyter --version如果有输出说明安装成功。2.4 Miniconda 安装步骤Miniconda 是 Anaconda 的轻量版本只包含 conda 包管理器和 Python。适合已经对 Python 有一定了解想自己控制环境的开发者。下载 Miniconda 安装包后同样安装。安装完成后使用 conda 命令安装 Jupyter Notebook 和 JupyterLabconda install jupyter conda install -c conda-forge jupyterlab如果只想用 Jupyter Notebook也可以直接conda install notebook2.5 使用 pip 安装 Jupyter如果你已经在使用系统 Python 或 pyenv 管理的 Python 环境可以直接pip install jupyter pip install jupyterlab或者pip install notebook这种方式的优点是轻量缺点是包管理比较“松”多个项目之间容易出现版本冲突。所以更推荐先创建虚拟环境再在虚拟环境里安装 Jupyter 和依赖包。2.6 验证安装结果安装完成后在终端执行jupyter notebook正常情况下会自动打开浏览器访问http://localhost:8888。看到 Jupyter Notebook 的目录界面说明安装成功。jupyter lab可以看到 JupyterLab 界面地址也是http://localhost:8888JupyterLab 和 Notebook 共用同一个服务端口可以同时安装、按需启动。3. ipynb 文件结构与 Jupyter 内核详解3.1 ipynb 文件的 JSON 结构为了让你真正理解 ipynb 文件我直接展示一个最小化的 .ipynb 文件内容。在任意目录创建一个文本文件把下面的内容粘贴进去把后缀改成.ipynb{ cells: [ { cell_type: markdown, metadata: {}, source: [ # 测试文档\n, 这是一个 Markdown 单元格。 ] }, { cell_type: code, execution_count: 1, metadata: {}, outputs: [ { name: stdout, output_type: stream, text: [ Hello Jupyter\n ] } ], source: [ print(\Hello Jupyter\) ] } ], metadata: { kernelspec: { display_name: Python 3, language: python, name: python3 }, language_info: { name: python, version: 3.10 } }, nbformat: 4, nbformat_minor: 5 }文件中的关键结构如下cell_type单元格类型取值有两种markdown是文本说明单元格code是代码单元格。source源码内容以字符串数组形式保存每行一个字符串行末带换行符。outputs代码运行后的输出只有 code 类型单元格才有。execution_count代码单元格执行计数例如第几次运行。metadata元信息。最外层 metadata 里有kernelspec记录这个笔记本使用的内核名称。nbformatJupyter notebook 的规范版本。你不需要手写 JSON但了解这个格式对排查问题很有帮助。比如你打开一个别人发的 .ipynb 文件发现内核无法启动可以先检查metadata.kernelspec.name字段看它指定的内核在当前环境里是否注册过。3.2 什么是 Jupyter KernelKernel 是 Jupyter 架构中负责执行代码的进程。你可以把它理解成一块“解释器的电路板”Jupyter 界面只是外壳真正运行 Python 代码的是 Kernel 进程里的 Python 解释器。启动 Jupyter 后连接到某个 Kernel代码才会被执行。一个 Jupyter 服务可以同时管理多个 Kernel也就是说你可以开多个 Notebook每个 Notebook 使用不同环境的内核。当一个新环境创建好并安装了 ipykernel 之后才能把这个环境注册到 Jupyter 的内核列表中。3.3 查看当前环境下的内核列表在终端执行jupyter kernelspec list输出会显示当前 Jupyter 环境中注册的所有内核Available kernels: python3 C:\Users\你的用户名\anaconda3\share\jupyter\kernels\python3如果你只看到 python3 一个内核说明后续需要通过ipykernel注册其他虚拟环境。3.4 cell 单元格操作基础理解了内核再来看界面操作。Jupyter Notebook 和 JupyterLab 的基础操作是相同的代码写在单元格里按Shift Enter运行当前单元格并跳到下一个单元格。常用快捷键快捷键功能Shift Enter运行当前单元格并选中下一个单元格Alt Enter运行当前单元格并在下方插入新单元格A在当前单元格上方插入新单元格B在当前单元格下方插入新单元格M把当前单元格切换为 MarkdownY把当前单元格切换为代码D D删除当前单元格Esc退出编辑模式Enter进入编辑模式这些快捷键在 Jupyter Notebook 和 JupyterLab 中基本相同。4. 完整实战从零搭建 Jupyter 环境接下来我们从零开始使用 Miniconda 或 Anaconda 作为环境管理工具搭建一个可用的 Jupyter 开发环境并创建虚拟环境关联到 Jupyter。这是整个文章最核心的部分建议边看边操作。4.1 创建项目目录结构先在本地创建目录例如D:\jupyter-labs作为 Notebook 的工作目录。后续启动 Jupyter 时都从这个目录进入。mkdir D:\jupyter-labs cd D:\jupyter-labs4.2 创建并激活虚拟环境如果你已经安装 Anaconda在终端输入conda create -n jupyter-env python3.10 -y如果使用 Miniconda命令完全一致。创建完成后激活Windowsconda activate jupyter-envmacOS / Linuxsource activate jupyter-env激活后终端左侧会出现(jupyter-env)前缀说明当前处于虚拟环境。4.3 安装 Jupyter Notebook 和 JupyterLab在激活的虚拟环境中安装conda install -c conda-forge jupyterlab notebook ipykernel -y这里安装了三个组件jupyterlab新版界面。notebook经典 Notebook 界面。ipykernelPython 内核支持用于注册当前环境到 Jupyter。如果你不想用 conda 装也可以用 pippip install jupyterlab notebook ipykernel4.4 启动 Jupyter在激活的环境中执行jupyter lab浏览器自动打开 JupyterLab默认端口是 8888。如果 8888 端口被占用可以指定端口jupyter lab --port8899也可以启动经典 Notebook 界面jupyter notebook4.5 创建一个新的 ipynb 文件并运行代码进入 JupyterLab 后点击左上角在 Notebook 区域选择Python 3 (ipykernel)即可创建新的 .ipynb 文件。在第一个代码单元格中输入print(Hello, Jupyter!)按Shift Enter你会看到下方输出Hello, Jupyter!接着把单元格切换为 Markdown 类型输入# 这是标题 我是 **数据分析** 笔记。按Shift EnterMarkdown 文本会渲染成带样式的富文本格式。这样你就创建了一个同时包含代码和说明文档的 ipynb 文件。4.6 将新环境注册到 Jupyter 内核列表中这是多环境开发者最常用的操作。假设你已经在同一个终端里创建了一个新的虚拟环境叫>conda create -n>python -m ipykernel install --user --name>jupyter kernelspec list输出中会多出>Available kernels: >import sys print(sys.executable)输出应该是你期望的 Python 解释器路径。例如C:\Users\你的用户名\anaconda3\envs\data-analysis\python.exe再运行import pandas as pd print(pd.__version__)如果包存在则输出版本号。如果报ModuleNotFoundError说明当前 Notebook 使用的内核环境里没有安装 pandas需要在该环境中执行pip install pandas。这一步是排查 Jupyter 环境问题最核心的手段请务必记住。5. Jupyter 配置与远程访问5.1 生成配置文件Jupyter 首次运行时会自动生成配置目录。如果你需要自定义配置可以手动生成配置文件jupyter notebook --generate-config该命令会生成配置文件Windows 路径一般在C:\Users\你的用户名\.jupyter\jupyter_notebook_config.pymacOS / Linux 路径一般为~/.jupyter/jupyter_notebook_config.py打开该文件可以修改端口、IP 绑定、默认目录、密码等配置。5.2 修改默认工作目录如果不想每次手动cd到工作目录可以直接修改配置项。在配置文件中找到# c.NotebookApp.notebook_dir 修改为c.ServerApp.root_dir D:/jupyter-labs注意新版 Jupyter 使用ServerApp作为配置前缀旧版是NotebookApp。如果你使用的 Jupyter 版本较旧配置项可能是c.NotebookApp.notebook_dir D:/jupyter-labs为避免配置不生效建议先检查当前 Jupyter 版本。在终端中输入jupyter --version5.3 设置登录密码Jupyter 默认使用 token 登录。新启动服务时终端会打印类似http://localhost:8888/tree?tokenxxxxxxxxxxxxxxxxxxxx如果不希望每次都用 token 打开可以设置固定密码。方法一使用命令设置密码jupyter server password按提示输入两次密码Jupyter 会生成哈希并写入配置文件。之后启动 Jupyter浏览器会提示输入密码。方法二在 Python 中生成密码哈希手动写入配置from jupyter_server.auth import passwd print(passwd(你的密码))将输出的哈希字符串写入配置文件c.ServerApp.password argon2:你的哈希值5.4 允许远程访问如果你有云服务器或者想在局域网内其他设备上访问 Jupyter需要修改 IP 绑定。配置文件里找到# c.ServerApp.ip localhost修改为c.ServerApp.ip 0.0.0.00.0.0.0表示监听所有网络接口。然后重启 Jupyterjupyter lab --ip0.0.0.0 --port8888 --allow-root这里有一个非常重要的安全提醒Jupyter 本质上是一个远程执行代码服务绑定到0.0.0.0后任何人都能通过浏览器访问你的地址相当于把一台可以执行任意代码的机器暴露在网络上。如果想远程使用必须同时设置密码并建议限制只在可信网络使用或者配合 SSH 隧道。切勿在没有密码保护的情况下绑定公网 IP。5.5 启动脚本示例为了避免每次输入长串命令可以写一个简单的启动脚本。在 Windows 下创建一个start-jupyter.batecho off cd /d D:\jupyter-labs conda activate jupyter-env jupyter lab在 macOS / Linux 下创建start-jupyter.sh#!/bin/bash cd /home/user/jupyter-labs source activate jupyter-env jupyter lab给脚本增加执行权限chmod x start-jupyter.sh以后启动 Jupyter 只需运行脚本即可。6. 常见问题与排查思路6.1 启动报错Command ‘jupyter‘ not found问题现象常见原因解决思路终端输入 jupyter notebook 提示找不到命令当前终端环境不是安装 Jupyter 的环境确认是否激活了正确的虚拟环境或检查 PATH 环境变量已安装但命令不存在安装了 notebook 但没有安装 jupyter 命令入口执行conda install jupyter或pip install jupyter在 Anaconda 环境下如果启动菜单里使用普通 CMD不一定能找到 conda 命令。可以改用“Anaconda Prompt”或先执行conda init重新打开终端后再试。6.2 启动报错端口被占用默认 8888 端口被占用时Jupyter 会自动尝试 8889、8890。如果仍然不想用其他端口可以先找到占用端口的进程Windowsnetstat -ano | findstr :8888macOS / Linuxlsof -i :8888找到 PID 后结束进程或者直接换端口启动jupyter lab --port88996.3 打开 Notebook 后 500 : Internal Server Error这个报错通常出现在打开旧版 .ipynb 文件时。Jupyter 在打开 notebook 时会读取metadata.kernelspec如果里面指定的内核不存在或者需要旧版本格式兼容就会返回 500。排查步骤先检查内核列表jupyter kernelspec list打开 .ipynb 文件查看metadata.kernelspec.name指向的内核是否在列表中。如果不是用文本编辑器手动修改 metadata 中kernelspec的name为当前可用内核例如python3。也可以启用兼容性设置。在配置文件中添加c.ServerApp.extra_static_paths []这个配置要按你的实际版本调整核心思路是让 Jupyter 忽略旧的 notebook 版本信息。6.4 Kernel 一直重启无法执行代码通常是因为当前虚拟环境中的依赖出现问题例如 ipykernel 版本过旧、系统库缺失、内存不足。按下顺序排查查看终端中 Kernel 输出的错误日志。在当前环境重新安装 ipykernelpip install --upgrade ipykernel重新注册内核python -m ipykernel install --user --name your-env-name --display-name Python (your-env-name)在终端启动测试直接进入内核环境conda activate your-env-name python手动执行出错的代码确认代码本身没问题。6.5 代码能运行但 import 报错 ModuleNotFoundError这是最常见的问题在终端里明明能用某个包但 Jupyter 里导入失败。原因只有一个Jupyter Notebook 的内核对应 Python 环境和你终端里安装包时所在的环境不是同一个。排查方法在 Notebook 里运行import sys print(sys.executable)在终端里运行python -c import sys; print(sys.executable)对比两个路径。如果不一样说明环境不对。解决方案有两种方案一在 Notebook 中安装包不推荐但快速import subprocess import sys subprocess.check_call([sys.executable, -m, pip, install, pandas])方案二推荐启动 Jupyter 前确保激活正确环境conda activate your-env-name pip install pandas jupyter lab这样做的好处是Jupyter 本地启动时默认内核就是当前环境不需要额外注册。6.6 Jupyter 中文显示乱码Windows 下偶尔会出现中文乱码。先判断是代码输出乱码还是界面乱码。代码输出乱码在代码单元格前加入import sys sys.stdout.reconfigure(encodingutf-8)界面乱码检查浏览器编码设置一般现代浏览器自动识别 UTF-8。也可以把 locale 设为 UTF-8Windows 终端执行chcp 65001再启动 Jupyter。6.7 无法自动打开浏览器在配置文件或启动命令中指定浏览器jupyter notebook --browserchromeWindows 下也可以写完整路径jupyter notebook --browserC:/Program Files/Google/Chrome/Application/chrome.exe如果在远程服务器上使用通常不需要浏览器自动打开直接用本机地址访问即可。7. 最佳实践与工程建议7.1 一个项目一个虚拟环境不要在 base 环境里堆依赖包。每做一个数据分析或机器学习项目就创建一个独立虚拟环境并安装对应的库这是 Jupyter 环境管理最重要的习惯。conda create -n house-price python3.10 conda activate house-price pip install pandas numpy scikit-learn matplotlib jupyter python -m ipykernel install --user --name house-price --display-name Python (house-price)这样每个项目有自己的依赖版本不会互相影响。7.2 ipynb 文件的代码规范虽然 Notebook 适合探索式开发但要防止代码乱成一团。实际工程中建议基本逻辑不要超过一个屏幕超过就拆函数。全局变量尽量统一放在项目最开始或独立的 config 单元格。Notebook 之间不要互相导入公共逻辑尽量封装到 .py 文件再 import。出现频率高的代码段比如数据读取、数据清洗、模型评估建议写成 .py 模块在 Notebook 中只做调用和展示这样可维护性更高。7.3 控制 ipynb 导出输出的长度当输出过长时Notebook 文件会变得很大打开缓慢。可以通过配置限制输出长度。在配置文件中设置c.ServerApp.max_buffer_size 500000000 c.NotebookApp.max_output_size 10000000注意有些配置项只在特定版本生效配置后需要重启 Jupyter。7.4 定期清理 Notebook 输出将 ipynb 提交到 Git 仓库时如果带上运行输出和图片会导致 diff 非常难读而且每次运行生成的输出不同容易产生冲突。有两种常见做法使用nbstripout工具清理输出后再提交。选择“导出”或者用 JupyterLab 的“清除所有输出”功能清理后再提交。安装nbstripoutpip install nbstripout在你项目的 Git 仓库中启用nbstripout --install之后每次 commit 时会自动清理 ipynb 输出。7.5 合理命名与目录划分为了提升 Jupyter 项目可读性建议使用编号目录例如jupyter-labs/ ├── 01_data_processing/ │ └── process_data.ipynb ├── 02_feature_engineering/ │ └── feature_build.ipynb ├── 03_models/ │ └── model_train.ipynb ├── data/ │ ├── raw/ │ └── processed/ ├── src/ │ └── utils.py └── README.md这样既保持 Notebook 的灵活性又具备工程项目的结构规范。7.6 生产环境不要使用 JupyterJupyter 适合做探索、分析、建模和教学但不适合做生产环境的自动化定时任务。生产环境的脚本应该封装为 .py 文件配合调度工具运行。原因在于 Notebook 状态是交互式的如果重复运行整个文件可能因为单元格时序问题得到错误结果。落地到生产时将 Notebook 中的核心逻辑抽成 Python 模块或脚本是更稳妥的方式。7.7 安全边界意识Jupyter 服务具备远程代码执行能力因此在使用时不要关闭密码保护。不要在公开网络中绑定0.0.0.0。如果是在云服务器上使用可以通过 SSH 隧道访问避免直接暴露端口。定期检查 Jupyter Server 和 ipykernel 是否有安全更新。7.8 自动化生成 ipynb 报告实际业务中经常需要把分析结果输出成报告。除了手动运行 Notebook也可以使用nbconvert命令行工具jupyter nbconvert --to html --template classic process_data.ipynb或者转成 Markdownjupyter nbconvert --to markdown process_data.ipynb也可以转成 PDF但 Windows 下需要额外安装 LaTeX 工具链这里不再展开。8. 总结与下一步学习方向Jupyter 环境配置的本质是理顺 Jupyter 客户端、Python 虚拟环境、Kernel 内核之间的关系。只要把握住一个核心点很多问题都能迎刃而解你运行的代码到底是哪个 Python 解释器在执行你的包到底安装到了哪个环境。如果你之前一直使用默认环境建议从这篇文章开始尝试为每个项目创建独立虚拟环境并把环境注册到 Jupyter 内核中。这种习惯一开始会觉得麻烦但遇到依赖冲突时你会发现环境隔离带来的好处非常明显。下一步可以继续学习这些方向JupyterLab 扩展插件安装例如变量管理器、代码格式化、Git 集成。使用Voilà将 Notebook 转换成可交互的 Web 应用。使用Papermill参数化执行 Notebook批量生成报告。把 Jupyter Notebook 与 VS Code 配合使用在 VS Code 中调用 ipynb 文件兼顾 IDE 的调试能力与 Notebook 的交互体验。不建议一开始就尝试太多插件和功能先把环境配稳、把内核切换弄熟、把项目目录管理好再逐步探索高级用法。配置环境这件事多踩几次坑之后就会形成一套属于自己的高效流程。
返回列表