十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

IPython 2.0 里程碑深度解析:Notebook 交互式组件、模态界面与安全模型(2.x 系列发布全览)

IPython 2.0 里程碑深度解析:Notebook 交互式组件、模态界面与安全模型(2.x 系列发布全览) 开发工具CLI【免费下载链接】ipythonOfficial repository for IPython itself. Other repos in the IPython organization contain things like the website, documentation builds, etc.项目地址https://gitcode.com/gh_mirrors/ip/ipython点击查看免费下载IPython 2.x 系列2.0–2.4是 IPython 从 1.0 走向 Notebook 时代的关键版本2.0 一次性引入交互式组件widgets、目录导航、持久化 URL、模态用户界面和 notebook 安全模型五大里程碑并切换到单一代码库原生支持 Python 2.7/3.3后续 2.1–2.4 则是围绕 CORS、Qt5、原子写入等问题的迭代修补。本文以仓库内 docs/source/whatsnew/version2.0.rst 发布说明为主线结合当前仓库源码逐一还原每项特性的背景、用法与实现细节帮助你理解现代 Jupyter 生态中许多设计签名信任、模态编辑、富输出格式化的源头。版本脉络从 2.0.0 到 2.4IPython 2.x 系列共经历一次大版本发布和四个维护版本以下是发布说明记载的时间线与要点版本时间核心内容2.0.02014 年 4 月交互式组件、目录导航、持久化 URL、模态 UI、安全模型、单一代码库 Python 3 支持2.1.02014 年 5 月2.0 的首个 bugfix 版本2.2.02014 年 8 月增加 CORS 配置2.3.02014 年 10 月改进 Qt5 支持notebook 采用原子写入防止数据丢失2.3.12014 年 11 月修复 Windows 上 notebook 的 CRCRLF 行尾 bug2.4文档标注为 January, 2014回移 nbformat v4 读取支持、kernel 中的 PyQt5 支持、Pygments 2.0 支持其中 2.4 值得单独说明发布说明特别提示部分计划打入 2.4 的补丁最终没有进入 2.4.0因此官方建议直接使用 2.4.1。该版本回移的三项能力分别是从 IPython 3 回移 nbformat v4 的读取支持、在 kernel 中而非 QtConsole支持 PyQt5、支持 Pygments 2.0。2.0 的贡献规模发布说明给出的贡献统计自 2013 年 8 月 IPython 1.0 之后可以作为理解 2.0 工作量的参照约 8 个月的工作周期约 650 个 pull request 被合并约 400 个 issue非 PR被关闭约 100 位贡献者参与约 4000 次提交由于体量庞大发布说明只覆盖主要亮点全部 issue、PR 与贡献者名单可参见仓库内的 详细发布信息。IPython Notebook 的四大新特性2.0 的五大里程碑中除安全模型外其余四项都属于 Notebook 前端体验的全面升级。目录导航与持久化 URLNotebook 的 dashboard仪表盘现在支持进入子目录浏览且 URL 基于 notebook 的路径与文件名持久化不再使用随机的 UUID URL。两个连带变化值得注意本地文件的访问不再需要files/前缀不同 notebook 之间以及 notebook 与其他文件之间的相对链接可以像普通 HTML 文件一样正常工作。这意味着用户可以把 notebook 当作一个目录中的普通文档来组织、链接和收藏路径即身份。交互式组件Interactive Widgets2.0 新增IPython.html.widgets模块核心思路是在 kernel 中操作 Python 对象在 notebook 前端通过 GUI 控件进行交互。IPython 自带针对简单数据类型的若干内置组件同时提供一套面向开发者的 API用于构建更复杂的自定义组件。这套组件机制正是后来 Jupyter Widgets 的前身也是Python 内核 浏览器控件交互范式的起点后端状态与前端控件通过消息协议双向同步开发者只需关注 Python 对象的变换逻辑UI 部分由组件框架接管。模态用户界面Modal User InterfaceNotebook 单元格新增了Edit编辑与Command命令两种独立模式这是 notebook 键盘操作体验的一次根本性重构编辑模式下输入文本命令模式下键盘按键被解释为对单元格乃至整个 notebook 的操作指令。模态设计让大量键盘快捷键成为可能也让快捷键自定义成为可实现的特性。发布说明同时提供了一个上手路径通过 Help 菜单启动的短引导导览guided tour可以系统性地熟悉新的用户界面包括两种模式的说明。安全模型签名信任 输出消毒2.0 引入了 notebook 安全模型目标是在打开 notebook 时防止不可信代码替用户执行。模型的四条核心规则信任由签名决定notebook 是否可信取决于其是否带有有效签名不可信的 HTML 输出会被消毒sanitize不可信的 JavaScript 永远不会被执行Markdown 中的 HTML 与 JavaScript 永远不被信任。这一签名即信任的设计直接奠定了后续 Jupyter 信任体系的基础只有用户本人或受信流程执行过的 notebook 才可能被标记为可信任何来源不明的 notebook 打开时其输出都会按不可信内容处理。Dashboard 的 Running 标签页dashboard 新增Running标签页集中展示当前所有正在运行的 notebook。这对于同时管理多个 notebook 会话、定位长时间运行的任务非常实用也是现代 Jupyter 文件管理器中Running面板的直接前身。单一代码库的 Python 3 支持此前 IPython 对 Python 3 的支持依赖构建阶段运行 2to3 进行源码转换2.0 起切换为单一代码库同一份源码在 Python 2.7 与 Python 3.3 上原生运行。这消除了 2to3 转换带来的维护负担和构建不确定性为后续多版本 Python 长期并行支持打下基础。需要明确的是版本约束IPython 2.0 要求 Python ≥ 2.7.2 或 ≥ 3.3.0不再支持 Python 3.0、3.1、3.2、2.5 与 2.6。matplotlib 图像格式的多格式选择2.0 弃用了单一格式的InlineBackend.figure_format配置项改为支持集合的InlineBackend.figure_formats可同时启用多种图像格式如同时输出 png 与 pdf。运行时可通过新 APIIPython.display.set_matplotlib_formats动态设置。从当前仓库源码看该能力的底层实现位于 IPython/core/pylabtools.py 的select_figure_formats函数def select_figure_formats(shell, formats, **kwargs): Select figure formats for the inline backend. Parameters ---------- shell : InteractiveShell The main IPython instance. formats : str or set One or a set of figure formats to enable: png, retina, jpeg, svg, pdf. **kwargs : any Extra keyword arguments to be passed to fig.canvas.print_figure. 该函数通过给display_formatter的各 MIME 类型 formatter 注册Figure的打印回调来实现多格式共存image/png注册 png 打印、image/jpeg注册 JPEG 打印、image/svgxml注册 SVG 打印、application/pdf注册 PDF 打印retina/png2x则注册 retina 双倍像素输出。源码中支持格式的集合为{png, png2x, retina, jpg, jpeg, svg, pdf}传入不支持格式会抛出ValueError。配套变更还有InlineBackend.figure_format现在支持 JPEG 输出前提是环境中安装了 PIL/Pillow新增InlineBackend.print_figure_kwargs用于向 matplotlib 的Canvas.print_figure传递关键字参数例如修改默认值为tight的bbox_inches或设置 JPEG 图像质量。文档示例用法为%config InlineBackend.print_figure_kwargs {bbox_inches: None}clear_output 的行为重构2.0 对clear_output做了三处行为变更不再有 500ms 延迟旧版为等待一段时间再清除移除了单独清除 stderr 与 stdout 的能力不再区分流新增wait标志waitTrue时clear_output不会立即执行而是等到新输出可用时才清除。这相当于让用户对输出做双缓冲从而消除动画闪烁同时使用waitTrue时输出 div 的高度会被记住避免布局跳动。当前仓库中的实现位于 IPython/core/display_functions.pydef clear_output(waitFalse): Clear the output of the current cell receiving output. Parameters ---------- wait : bool [default: false] Wait to clear the output until new output is available to replace it. from IPython.core.interactiveshell import InteractiveShell if InteractiveShell.initialized(): InteractiveShell.instance().display_pub.clear_output(wait) else: print(\033[2K\r, end) sys.stdout.flush() print(\033[2K\r, end) sys.stderr.flush()可以看到wait参数默认False被透传给display_pub.clear_output而在非交互式环境下则退化为在 stdout/stderr 上输出回车清行转义序列。可配置容器Container Trait的原地扩展部分 configurable trait 的值是容器类型list、dict、set。2.0 起配置对象支持在配置文件中直接对这类 trait 调用extend、update、insert等方法这些调用最终会作用于原始对象上。效果是无需把初始值整体复制粘贴即可增量追加内容。发布说明给出的示例c get_config() c.InlineBackend.rc.update({ figure.figsize : (6, 4) })这种配置即方法调用的设计让配置文件更像程序而非静态数据也为后来更灵活的配置组织方式奠定了基础。启动时隐藏命名空间的行为调整此前所有在启动阶段声明的名字来自 startup 文件、ipython -i script.py等都会被放入隐藏命名空间从而对%whos等工具隐藏。2.0 对此做了两项调整命令行运行脚本ipython -i script.py现在与%run行为一致其变量永不被隐藏新增布尔配置项InteractiveShellApp.hide_initial_ns可彻底关闭隐藏行为默认行为保持不变默认仍为隐藏。该配置项在仓库中定义于 IPython/core/shellapp.pyhide_initial_ns Bool(True, helpShould variables loaded at startup (by startup files, exec_lines, etc.) be hidden from tools like %who? ).tag(configTrue)注意其 help 文本明确覆盖了 startup 文件、exec_lines等启动加载路径说明初始命名空间是一个全局概念而不仅限于命令行脚本。用 dill 扩展并行序列化新函数IPython.utils.pickleutil.use_dill允许使用 dill 扩展IPython.parallel的序列化能力如支持闭包等标准 pickle 无法处理的对象。同时新增DirectView.use_dill便捷方法一次调用即可在本地与所有 engine 上启用 dill。重写的 IPython console 词法分析器IPython console 的语法高亮词法分析器被重写现在支持 traceback回溯信息高亮以及自定义输入/输出提示符。DisplayFormatter API 的补齐2.0 之前Formatter API 缺乏官方途径来查询或移除已注册的回调。2.0 为BaseFormatter新增以下方法全部在找不到匹配时抛出KeyErrorlookup(instance)返回适合给定对象实例的回调lookup_by_type(type_or_str)按类型或mod.name类型字符串返回回调pop(type_or_str)按类型或字符串移除某类型的注册可传第二个参数作为默认值以避免KeyError行为类似 dict.pop。同时for_type(type_or_str)的行为保持兼容仅增加了对mod.name类型字符串的支持从而消除了对for_type_by_name()的依赖后者出于向后兼容继续保留。以上 API 在当前仓库的 IPython/core/formatters.py 中均可找到对应实现lookupL434先查单例注册singleton printers再按类型查lookup_by_typeL457支持类型对象与mod.name字符串两种键字符串形式还会走 deferred printers 的按需导入路径for_typeL491对字符串输入会内部转发给for_type_by_namepopL572则同时清理类型映射与延迟注册。格式化失败不再被静默另一个重要变化是formatter 抛出的异常不再被静默吞掉而是转化为IPython.core.formatters.FormatterWarning同样如果 formatter 返回了非法类型的数据例如为image/png返回整数也会触发FormatterWarning。此外formatter 现在可以抛出NotImplementedError而不只是返回None来表示自己无法格式化某个对象。当前源码中FormatterWarning定义于 IPython/core/formatters.py返回类型校验逻辑见 L420-L432 的_check_return相关代码——返回值既不是None、也不是预期的返回类型时就会发出警告。其他值得注意的变更发布说明还记录了一批覆盖面很广的杂项变更%%capture单元魔法现在捕获富文本显示输出rich display output而不只是 stdout/stderrNotebook 中Tab 触发的 tooltip 被禁用以避免与补全冲突在函数签名内或选中文本时仍可通过Shift-Tab唤起 tooltipJavaScript API 中object_info_request被object_info取代后者是更简单的回调注册接口但与旧接口不兼容Linux 下配置目录从 XDG 规范~/.config/ipython回退为~/.ipython以保持跨系统一致若发现 XDG 位置会发出警告并在该位置尚无目录时将其迁移到新位置Markdown 单元格中的公式、图片与表格现在居中多行公式在输出区居中单行公式保持左对齐IPython 配置对象可加载/序列化为 JSONJSON 配置文件与对应.py文件同名且若存在优先级更高bash 补全更新为支持所有 ipython 子命令与参数含 nbconvertipython history trim新增--keepN作为--HistoryTrim.keepN的别名新增ipython history clear子命令等价于ipython history trim --keep0可通过%run notebook.ipynb在交互会话中直接运行 notebookNotebook 菜单恢复打印预览并提供以多种格式下载当前 notebook 的选项底层由 nbconvert 驱动Pandoc 缺失时抛出PandocMissing异常版本过旧时打印警告发布说明建议的 nbconvert 配套 Pandoc 版本为 1.12.1输入转换器input transformers现在可以抛出SyntaxError来表示输入非法IPython 的输入转换机制会负责向用户展示异常并重置状态相关文档见 docs/source/config/inputtransforms.rstJavaScript 显示中调用container.show()被弃用未来版本会报错container现在只要非空就会自行显示引入新的回调系统详见 docs/source/config/callbacks.rst默认 HTML 模板中jQuery 与 require.js 从 CDN 加载使静态 HTML 导出如 nbviewer 场景中也能使用 JavaScript。向后不兼容变更清单升级到 2.0 前需要审查以下破坏性变更Python 版本门槛提升不再支持 Python 2.6 与 3.2最低要求为 2.7 与 3.3nbconvertTransformer 类更名为 Preprocessor其call方法更名为preprocesspost-processor 的call方法更名为postprocess移除模块IPython.core.fakemodule别名系统改用魔法函数重新实现在默认开启 automagics 的情况下几乎没有可见差异但IPython.core.alias.AliasManager的部分 API 被移除修复 matplotlib inline 与 GUI 后端切换问题但该修复要求matplotlib ≥ 1.1从此 matplotlib 1.1 成为 IPython 的最低支持版本旧版本大多仍可用但不再保证pycolor命令被移除官方推荐使用能力更强的 Pygments 项目中的pygmentize若必须保留 pycolor 的精确输出可改用python -m IPython.utils.PyColorize foo.py当前仓库仍保留 IPython/utils/PyColorize.py移除IPython.lib.irunner及其命令行入口早已废弃移除input_prefilterhook代码中从未真正使用过输入转换器系统提供了更强大的输入代码处理 APIIPython.core.inputsplitter.IPythonInputSplitter不再有source_raw_reset()方法改用raw_reset原用法可用如下代码替代raw isp.source_raw transformed isp.source_reset()移除Azure notebook manager已与 notebook 存储方案不再兼容配置化 URL 简化base_project_url更名为base_url旧名暂时保留为弃用别名移除base_kernel_url配置项改用base_url移除websocket_url配置项改用base_url。总结IPython 2.x 是一次承上启下的发布Notebook 从能用的编辑器进化为有目录、有组件、有安全模型、有模态交互的成熟交互环境Python 3 支持从 2to3 转换走向单一代码库显示与格式化系统则补齐了查询、移除、警告等此前缺失的能力。今天 Jupyter 生态中的信任签名、widgets 交互、多 MIME 格式化输出等设计都能在 2.0 的发布说明与当前仓库源码如 IPython/core/formatters.py、IPython/core/pylabtools.py、IPython/core/display_functions.py中找到它们的源头实现。赞分享开发工具CLI【免费下载链接】ipythonOfficial repository for IPython itself. Other repos in the IPython organization contain things like the website, documentation builds, etc.项目地址https://gitcode.com/gh_mirrors/ip/ipython点击查看免费下载相关推荐BuildKit 项目流程与安全边界指南Issue 分级、发布里程碑与安全模型解析BuildKit 项目流程与安全边界指南Issue 分级、发布里程碑与安全模型解析 本文基于 PROJECT.md https://link.gitcode.构建工具云原生后端GxEPD2实战项目制作个性化电子纸日历与天气显示系统GxEPD2实战项目制作个性化电子纸日历与天气显示系统 GxEPD2是一款功能强大的Arduino电子纸显示库专为SPI接口的电子纸显示屏设计。通过本指南国产大模型里程碑事件阿里千问3系列发布三月全景观察技术突破与产业影响深度解析在人工智能技术飞速迭代的2024年国产大模型领域迎来了具有里程碑意义的重要事件。三个月前科技巨头阿里巴巴正式对外发布了其最新一代大语言模型产品——千问3Q大模型深度学习人工智能上一篇ARIS 技能目录全解析83 个 Markdown-only Skill 的分层架构、依赖图谱与治理机制下一篇告别千篇一律用Awesome Generative AI打造专属智能交互界面创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表