- 开发工具
- 前端
【免费下载链接】jupyter_contrib_nbextensions
A collection of various notebook extensions for Jupyter
本篇指南围绕jupyter_contrib_nbextensions在使用与维护中最常见的三类问题展开:从旧版本迁移后残留文件导致的扩展重复列出、大型 Notebook 加载后扩展静默失效的 requirejs 超时问题,以及如何在本地构建并浏览项目文档。读完本文,你将掌握用jupyter --paths定位残留、用jupyter contrib nbextension uninstall清理旧文件、在custom.js中调大 requirejswaitSeconds,以及用tox/sphinx-build生成本地文档的完整操作路径。
旧版本迁移与"扩展重复列出"问题
如果你从较早版本的 contrib notebook extensions 仓库迁移而来,系统上可能会残留一些旧文件。最典型的表现是:在jupyter_nbextensions_configurator的配置页面里,同一个扩展被列出两次。
出现这种现象的根本原因是同一份扩展文件被安装到了多个 jupyter data 目录中(例如用户目录与sys.prefix目录各有一份),前端在扫描时对每个 data 目录各注册了一次。因此,排查和清理的思路就是:先找到所有可能存放 nbextensions 的目录,确认哪些是旧版本残留,再通过卸载命令逐一移除。
值得说明的是,仓库还专门提供了迁移子命令,可以在清理前先处理历史遗留:
jupyter contrib nbextension migrate从源码 migrate.py 可以看到,migrate()依次执行四类动作:
- 迁移 require 路径(
_migrate_require_paths):把旧版配置中形如usability/codefolding/main、publishing/gist_it/main等旧的 require 路径改写到新位置(如codefolding/main、gist_it/main),详见 migrate.py 中的映射表; - 清理旧安装的文件(
_uninstall_pre_files):读取旧包遗留的installed_files.txt清单(文件名为ipython-contrib-IPython-notebook-extensions-installed_files.txt),把清单中记录的旧文件移动到临时目录而非直接删除,便于用户日后手动恢复,见 migrate.py; - 撤销旧安装写入的配置(
_uninstall_pre_config):移除jupyter_notebook_config、jupyter_nbconvert_config中的旧模板路径、旧 preprocessor 与旧 postprocessor 类,以及.py配置文件中由旧版标记#--- nbextensions configuration ---括起的段落,见 migrate.py; - 卸载旧 pip 包名(
_uninstall_pre_pip):尝试卸载旧包名Python-contrib-nbextensions,见 migrate.py。
因此,遇到重复条目时,推荐的完整操作顺序是:先执行migrate处理历史遗留,再按下文步骤定位并卸载残留文件。
大型 Notebook 加载后扩展失效
如果你打开一个体量很大的 Notebook,加载完成后扩展可能不再生效。这个问题的成因有两类:一方面,某些 nbextensions 本身加载耗时较长;另一方面,notebook 前端自身的资源加载机制也存在限制(可参考 notebook 项目的 issue #2075 获取更详细的分析)。
根本原因在于:notebook 前端通过 requirejs 异步加载扩展模块,而 requirejs 对模块加载有一个超时上限(默认 30 秒)。当 Notebook 文件很大、需要加载的资源很多时,加载时间一旦超过该上限,requirejs 就会判定加载失败,后续扩展自然不再工作。
调大 requirejs 超时时间
缓解办法是在浏览器的custom.js中调高 requirejs 的waitSeconds配置。custom.js是 Jupyter notebook 提供给用户的前端自定义入口,位于 jupyter 配置目录下的custom子目录中(可用jupyter --config-dir查看具体路径),不存在则自行创建。在其中加入:
// default is 30s, increase to 1 minute window.requirejs.config({waitSeconds: 60});上面的注释明确说明了默认值为 30s、这里调高到 1 分钟。修改后需要重启 notebook 服务器并刷新浏览器页面才能生效。如果 Notebook 仍然非常大,还可以继续调大该数值,但要注意这只是一个缓解手段——根本性的解决方向是减少单文件体积(如拆分 Notebook、清理过大的输出),以及排查是否存在加载特别缓慢的扩展(可参考 nbextensions 侧的 issue #1195 讨论)。
清理重复条目:定位残留文件并卸载
第一步:用jupyter --paths定位所有安装位置
旧版本的 nbextensions 会位于某个 jupyter data 目录的nbextensions子目录中。要找到系统上全部候选位置,执行:
jupyter --paths该命令会列出 jupyter 依次搜索的 data 目录、config 目录与 runtime 目录。归纳起来,可能安装 nbextensions 的位置大致有:
| 安装级别 | 典型位置 |
|---|---|
| 用户级(user) | 用户的 jupyter data 目录,Windows 上通常为~\.jupyter |
| 环境级(sys.prefix) | Python 的sys.prefix下的 jupyter data 目录,例如sys.prefix + /share/jupyter/nbextensions |
| 系统级(system) | 系统级 jupyter data 目录,随操作系统而异;例如 Windows 7 上约为~\AppData\jupyter\nbextensions |
第二步:用--debug观察服务器日志
如果还不确定额外扩展到底被加载自哪里,可以带--debug启动 notebook 服务器:
jupyter notebook --debugjupyter_nbextensions_configuratorserverextension(作为依赖随本仓库安装,见 install.py 中通过EnableJupyterNbextensionsConfiguratorApp启用它的逻辑)会在服务器日志中打印扩展的加载来源。当存在重复文件时,configurator 通常会在日志中给出关于重复文件位置的警告,据此即可确定要清理的目标目录。
第三步:执行卸载命令
确认残留位置后,使用仓库提供的卸载子命令进行清理。默认优先清理用户级安装:
jupyter contrib nbextension uninstall --user若系统级目录也残留旧文件,则继续清理系统级(需要具备写入系统级 jupyter 目录的权限,Windows 上的权限行为可能因环境而异):
jupyter contrib nbextension uninstall --system从源码看,卸载子命令的实现位于 application.py 的UninstallContribNbextensionsApp(_toggle_value = False),它与安装共用一套基类逻辑,并支持--user、--system、--sys-prefix三选一的互斥 flag(同时指定多个会抛出ArgumentConflict,见 application.py 与 tests/test_application.py 中的冲突测试)。真正干活的是 install.py 中的uninstall(),它经由toggle_install调用两条主线:
toggle_install_files:对jupyter_contrib_nbextensions与依赖包jupyter_highlight_selected_word分别执行uninstall_nbextension_python,删除被复制到 jupyter data 目录的扩展文件,见 install.py;toggle_install_config:反方向编辑配置,包括禁用contrib_nbextensions_help_item/main、从jupyter_nbconvert_config的Exporter.extra_template_paths与Exporter.preprocessors中移除本仓库追加的模板路径和 preprocessor(CodeFoldingPreprocessor、PyMarkdownPreprocessor)等,见 install.py。
卸载行为本身有对应的测试保障:tests/test_application.py 中的_check_uninstall断言卸载后 data 目录中不应残留任何已安装文件,而配置目录中除NotebookApp、version及 configurator 自身的菜单项外应被清空。
补充:卸载与运行中服务器的冲突
需要留意一点:默认情况下,如果检测到 notebook 服务器正在运行,安装/卸载操作会拒绝执行并抛出NotebookRunningError(提示信息中还提到运行记录 json 可能已过期的情况,见 install.py)。如果确认没有其他用户在占用服务器,或明确知道运行记录已过期,可以显式加上--skip-running-check强制执行:
jupyter contrib nbextension uninstall --user --skip-running-check在本地构建并浏览文档
方法一:通过 tox 构建
项目文档在线托管于 readthedocs,若想离线阅读或为文档开发做本地预览,可以在仓库根目录执行:
tox -e docstox会依据 tox.ini 中[testenv:docs]的定义,先按 docs/requirements.txt 安装 sphinx、recommonmark、sphinx_rtd_theme、readthedocs-sphinx-ext等文档依赖,然后执行:
sphinx-build -E -T -b readthedocs docs/source dist/docs sphinx-build -E -T -b linkcheck docs/source dist/docs即生成readthedocs格式的 HTML 产物,并同时跑一遍外部链接检查。注意:当前仓库的 tox.ini 将构建输出写到dist/docs目录(历史上一些版本输出到build/html,以你所检出的仓库配置为准)。
生成完成后,可以直接用浏览器打开dist/docs/index.html,也可以在仓库根目录启动一个本地静态服务器:
python -m http.server 8000然后访问http://localhost:8000浏览。
方法二:直接调用 sphinx-build(绕过 tox)
如果你使用的是 conda 等环境、不想引入 tox,也可以直接调用sphinx-build:
sphinx-build -E -T -b readthedocs -c docs/source . docs/build其中-E表示强制重建(忽略增量缓存),-T输出完整回溯信息,-b readthedocs指定使用 readthedocs 的 builder,-c docs/source指定配置文件目录,.为源文档根目录,docs/build为输出目录。这里的输出目录是docs/build,因此按上述命令构建后,索引页位于docs/build/docs/source/index.html。
随后同样启动本地服务器:
python -m http.server 8000在浏览器中访问http://localhost:8000/build/docs/source/index.html即可查看。
文档构建的配置细节
文档构建由 docs/source/conf.py 驱动:它同时支持.rst与.md两种源文件(markdown 通过CommonMarkParser解析),启用了sphinx.ext.autodoc、intersphinx、napoleon、mathjax等扩展,并通过recommonmark的AutoStructify自动生成目录树;在非 readthedocs 环境下还会注册ReadtheDocsBuilder并切换为sphinx_rtd_theme主题,见 conf.py。此外,conf.py 会在构建时执行 autogen_scripts 下的自动生成脚本,因此首次构建前请确保依赖已按 docs/requirements.txt 安装完整。
小结
- 扩展重复列出通常源于旧版本残留文件散落在多个 jupyter data 目录,可用
jupyter --paths与jupyter notebook --debug定位,再用jupyter contrib nbextension uninstall --user/--system(必要时加--skip-running-check)清理;需要处理更早的历史安装时可先执行jupyter contrib nbextension migrate。 - 大型 Notebook 加载后扩展失效,多为 requirejs 默认 30 秒超时所致,在
custom.js中设置window.requirejs.config({waitSeconds: 60})即可缓解。 - 本地文档可通过
tox -e docs或直接sphinx-build -E -T -b readthedocs -c docs/source . docs/build构建,再用python -m http.server 8000浏览。
- 开发工具
- 前端
【免费下载链接】jupyter_contrib_nbextensions
A collection of various notebook extensions for Jupyter
相关推荐
ComfyUI-Florence2模型加载故障排查与修复指南
ComfyUI Florence2模型加载故障排查与修复指南 当你在ComfyUI中尝试使用Florence2视觉语言模型时,可能会遇到一个令人困惑的问题:Fl
人工智能大模型计算机视觉多模态本地部署AI 应用从开发到生产:lambda-the-terraform-way项目的完整生命周期管理指南
从开发到生产:lambda the terraform way项目的完整生命周期管理指南 AWS Lambda与Terraform的完美结合 掌握无服务器架构从
RTranslator大模型下载故障快速排查与修复指南
RTranslator大模型下载故障快速排查与修复指南 RTranslator作为世界上首个开源实时翻译应用,其核心功能依赖于多个大语言模型文件。然而许多用户在
人工智能AI 应用本地部署语音NLP移动开发
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考