问题描述
我正在运行python azure函数,该函数正在通过nbconvert
API运行jupyter笔记本。这工作了一段时间,尽管没有部署新代码,但我开始出现以下错误:
在以下路径中找不到名称为'lab'的模板子目录:\ n \ t / home / .local / share / jupyter \ n \ t / usr / local / share / jupyter \ n \ t / usr / share / jupyter
我用于实现此目的的代码是:
from nbconvert.preprocessors import ExecutePreprocessor
from nbconvert import HTMLExporter
...
dl = DictLoader({'footer':
"""
{%- extends 'full.tpl' -%}
{% block input_group %}
{%- if cell.Metadata.get('nbconvert',{}).get('show_code',False) -%}
((( super() )))
{%- endif -%}
{% endblock input_group %}
{% block output_group %}
<style> .output_prompt{visibility:hidden;}</style>
{{ super() }}
{% endblock output_group %}
"""})
...
html_exporter = HTMLExporter(extra_loaders=[dl],template_file='footer')
html_exporter.template_name = 'classic'
with open(JUPYTER_DIR + NOTEBOOK_NAME) as f:
nb = nbformat.read(f,as_version=4)
ep = ExecutePreprocessor(timeout=600,kernel_name='python')
ep.preprocess(nb,{'Metadata': {'path': JUPYTER_DIR}})
(body,resources) = html_exporter.from_notebook_node(nb)
functionapp正在运行以下内容:
python3.6
nbconvert6.0.3
jupyter-lab0.1.1
我尝试搜索该错误,到目前为止,我发现的最接近的错误是this,虽然相似,但是没有得到答案,也不完全相同。以为我会在这里发帖,看看是否有人知道如何解决,或者如果我设法解决此问题,我可以进行更新。
我很困惑,因为lab
不是我熟悉的关键字(可能是jupyterlab
之外的关键字),并且不在代码中使用。
至于提到的路径:
-
home/.local/share/jupyter/
存在并包含nbconvert/templates/html
-
usr/local/share/jupyter
和usr/share/jupyter
不存在
在此先感谢您的帮助!
解决方法
将 nbconvert 升级到 6.0.8 后,我遇到了同样的问题。
回滚到 nbconvert 5.6.1 为我解决了这个问题。
pip uninstall nbconvert
pip install nbconvert==5.6.1
在 Mac 上,如果您在用户模式下使用 pip3 安装了 jupyter
ln -s ~/Library/Python/3.8/share/jupyter/nbconvert ~/Library/Jupyter/nbconvert
用合适的版本替换3.8
,我遇到了完全相同的错误。我假设默认/内置模板只是在anaconda安装过程中安装的。我认为我们必须查看旧版本的jupyter notebook / nbconvert / anaconda,然后复制并粘贴模板文件。
, pip install -U nbconvert
安装
.../site-packages/share/jupyter/nbconvert/templates/
但是jupyter nbconvert my.ipynb --to python
不在那儿-
# ValueError: No template sub-directory with name 'base' found in the following paths:
/Users/myuserid/Library/Jupyter # mac
/Library/Frameworks/Python.framework/Versions/3.7/share/jupyter
/usr/local/share/jupyter
/usr/share/jupyter
在其中之一中建立到.../site-packages/.../templates
的符号链接,例如
cd $HOME/Library/Jupyter/nbconvert # mac,other platforms dunno
mv templates templates-tmp # empty
ln -s .../site-packages/share/jupyter/nbconvert/templates .
ls templates/
# asciidoc/ classic/ html/ latex/ python/ rst/
# base/ compatibility/ lab/ markdown/ reveal/ script/
,
对我来说,可以使用以下方法卸载和安装nbconvert:
pip uninstall nbconvert
pip install nbconvert
已修复此错误。
,根据您的安装位置,您可能需要调整下面的“路径”和“目标”变量。在我的情况下(Windows 10 从 Microsoft 商店安装了 python 并通过 pip 安装了 jupyter)以下解决了 jupyter 找不到 nbconvert 的问题。您将需要使用 elevated power shell (PS) 在 APPDATA 中创建链接
PS > $path=$env:APPDATA+"\jupyter\nbconvert"
PS > $target=$env:LOCALAPPDATA+"\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\share\jupyter\nbconvert"
PS > New-Item -ItemType SymbolicLink -path "$path" -target "$target"
这应该在适当的位置创建链接
,在 Mac 上,与 @denis 解决方案非常相似,只是位置不同:
cd /opt/homebrew/opt/python@3.9/Frameworks/Python.framework/Versions/3.9/share/jupyter/nbconvert/
mv templates templates-tmp
ln -s /opt/homebrew/share/jupyter/nbconvert/templates