为 jupyter nbconvert V6 指定自定义模板路径的正确方法是什么?
What is the proper way to specify a custom template path for jupyter nbconvert V6?
为 nbconvert 指定自定义模板路径的正确方法是什么?
在 nbonvert 版本 6 下,模板现在是一个包含多个文件的目录。这些模板可以位于任意数量的位置,具体取决于平台。
Raspbian:
['/home/pi/.local/share/jupyter/nbconvert/templates', '/usr/local/share/jupyter/nbconvert/templates', '/usr/share/jupyter/nbconvert/templates']
OS X 与 Pyenv:
['/Users/ac/Library/Jupyter/nbconvert/templates', '/Users/ac/.pyenv/versions/3.8.5/Python.framework/Versions/3.8/share/jupyter/nbconvert/templates', '/usr/local/share/jupyter/nbconvert/templates', '/usr/share/jupyter/nbconvert/templates']
我正在尝试在多个不同的平台上同步我的模板,并想指定一个自定义位置。
2 年前的 似乎是正确的,但似乎适用于 nbconvert 的 V5——该方法已将名称从 template_path
更改为 template_paths
。
我已经尝试使用上面 link 中建议的解决方案,使用我知道放置在已知位置之一时有效的模板。尝试按照建议指定自定义位置时出现此错误:
jinja2.exceptions.TemplateNotFound: null.j2
我怀疑通过将路径设置为 /path/to/.jupyter/templates/my_template/
,我完全覆盖了所有其他模板位置并丢失了我的模板扩展的 null.j2
模板。我在最后包含了我的模板,因为它有一些错误导致了这个。
The docs for V6 config files 也没什么帮助:
TemplateExporter.template_paths : List
Default: ['.']
No description
和
PythonExporter.template_paths : List
Default: ['.']
No description
long thread from May 2019 在 Git Repo 上讨论了这个问题,但我不太明白最终的结论是什么。
我的自定义 Python 模板:
{%- extends 'null.j2' -%}
## set to python3
{%- block header -%}
#!/usr/bin/env python3
# coding: utf-8
{% endblock header %}
## remove cell counts entirely
{% block in_prompt %}
{% if resources.global_content_filter.include_input_prompt -%}
{% endif %}
{% endblock in_prompt %}
## remove markdown cells entirely
{% block markdowncell %}
{% endblock markdowncell %}
{% block input %}
{{ cell.source | ipython2python }}
{% endblock input %}
## remove magic statement completely
{% block codecell %}
{{'' if "get_ipython" in super() else super() }}
{% endblock codecell%}
Issue #1428 on the Git Repo 包含此解决方案的基础。
从 scratch/recent 从 v5 升级到 v6 执行以下操作:
- 为
~/.jupyter
中的 V6 生成当前 up-to-date 配置文件
$ jupyter nbconvert --generate-config
- 编辑配置文件
~/.jupyter/jupyter_nbconvert_config.py
添加以下行:
from pathlib import Path
# set a custom path for templates in
c.TemplateExporter.extra_template_basedirs
my_templates = Path('~/my/custom/templates').expanduser().absolute()
# add the custom path to the extra_template_basedirs
c.TemplateExporter.extra_template_basedirs = [my_templates]
将模板添加到 ~/my/custom/templates
目录
- 每个模板必须在其自己的子目录中 (
/my/custom/templates/foo_template
)
- 每个模板必须包含一个
conf.json
和 index.py.j2
文件。索引是实际的模板。请参阅下面的示例
运行 nbconvert:
$ jupyter nbconvert --to python --template my_custom_template foo.ipynb
conf.json
基本示例
{
"base_template": "base",
"mimetypes": {
"text/x-python": true
}
}
index.py.j2
例子
{%- extends 'null.j2' -%}
## set to python3
{%- block header -%}
#!/usr/bin/env python3
# coding: utf-8
{% endblock header %}
## remove cell counts entirely
{% block in_prompt %}
{% if resources.global_content_filter.include_input_prompt -%}
{% endif %}
{% endblock in_prompt %}
## remove markdown cells entirely
{% block markdowncell %}
{% endblock markdowncell %}
{% block input %}
{{ cell.source | ipython2python }}
{% endblock input %}
## remove magic statement completely
{% block codecell %}
{{'' if "get_ipython" in super() else super() }}
为 nbconvert 指定自定义模板路径的正确方法是什么?
在 nbonvert 版本 6 下,模板现在是一个包含多个文件的目录。这些模板可以位于任意数量的位置,具体取决于平台。
Raspbian:
['/home/pi/.local/share/jupyter/nbconvert/templates', '/usr/local/share/jupyter/nbconvert/templates', '/usr/share/jupyter/nbconvert/templates']
OS X 与 Pyenv:
['/Users/ac/Library/Jupyter/nbconvert/templates', '/Users/ac/.pyenv/versions/3.8.5/Python.framework/Versions/3.8/share/jupyter/nbconvert/templates', '/usr/local/share/jupyter/nbconvert/templates', '/usr/share/jupyter/nbconvert/templates']
我正在尝试在多个不同的平台上同步我的模板,并想指定一个自定义位置。
2 年前的template_path
更改为 template_paths
。
我已经尝试使用上面 link 中建议的解决方案,使用我知道放置在已知位置之一时有效的模板。尝试按照建议指定自定义位置时出现此错误:
jinja2.exceptions.TemplateNotFound: null.j2
我怀疑通过将路径设置为 /path/to/.jupyter/templates/my_template/
,我完全覆盖了所有其他模板位置并丢失了我的模板扩展的 null.j2
模板。我在最后包含了我的模板,因为它有一些错误导致了这个。
The docs for V6 config files 也没什么帮助:
TemplateExporter.template_paths : List
Default: ['.']
No description
和
PythonExporter.template_paths : List
Default: ['.']
No description
long thread from May 2019 在 Git Repo 上讨论了这个问题,但我不太明白最终的结论是什么。
我的自定义 Python 模板:
{%- extends 'null.j2' -%}
## set to python3
{%- block header -%}
#!/usr/bin/env python3
# coding: utf-8
{% endblock header %}
## remove cell counts entirely
{% block in_prompt %}
{% if resources.global_content_filter.include_input_prompt -%}
{% endif %}
{% endblock in_prompt %}
## remove markdown cells entirely
{% block markdowncell %}
{% endblock markdowncell %}
{% block input %}
{{ cell.source | ipython2python }}
{% endblock input %}
## remove magic statement completely
{% block codecell %}
{{'' if "get_ipython" in super() else super() }}
{% endblock codecell%}
Issue #1428 on the Git Repo 包含此解决方案的基础。
从 scratch/recent 从 v5 升级到 v6 执行以下操作:
- 为
~/.jupyter
中的 V6 生成当前 up-to-date 配置文件
$ jupyter nbconvert --generate-config
- 编辑配置文件
~/.jupyter/jupyter_nbconvert_config.py
添加以下行:
from pathlib import Path
# set a custom path for templates in
c.TemplateExporter.extra_template_basedirs
my_templates = Path('~/my/custom/templates').expanduser().absolute()
# add the custom path to the extra_template_basedirs
c.TemplateExporter.extra_template_basedirs = [my_templates]
将模板添加到
~/my/custom/templates
目录- 每个模板必须在其自己的子目录中 (
/my/custom/templates/foo_template
) - 每个模板必须包含一个
conf.json
和index.py.j2
文件。索引是实际的模板。请参阅下面的示例
- 每个模板必须在其自己的子目录中 (
运行 nbconvert:
$ jupyter nbconvert --to python --template my_custom_template foo.ipynb
conf.json
基本示例
{
"base_template": "base",
"mimetypes": {
"text/x-python": true
}
}
index.py.j2
例子
{%- extends 'null.j2' -%}
## set to python3
{%- block header -%}
#!/usr/bin/env python3
# coding: utf-8
{% endblock header %}
## remove cell counts entirely
{% block in_prompt %}
{% if resources.global_content_filter.include_input_prompt -%}
{% endif %}
{% endblock in_prompt %}
## remove markdown cells entirely
{% block markdowncell %}
{% endblock markdowncell %}
{% block input %}
{{ cell.source | ipython2python }}
{% endblock input %}
## remove magic statement completely
{% block codecell %}
{{'' if "get_ipython" in super() else super() }}