Skip to content

Invoking nbconvert with uv run and --with results in missing templates #15219

@jenshnielsen

Description

@jenshnielsen

Summary

To reproduce create a new project

uv init testnbconvert

add nbconvert as a dependecy

dependencies = ["nbconvert==7.16.6"]

now running

uv run  python -c "import nbconvert;  nbconvert.RSTExporter()"

works as expected

but running

uv run --with ipykernel python -c "import nbconvert;  nbconvert.RSTExporter()"

results in

Traceback (most recent call last):
  File "D:\source\repos\testnbconvert\.venv\Lib\site-packages\traitlets\traitlets.py", line 632, in get
    value = obj._trait_values[self.name]
            ~~~~~~~~~~~~~~~~~^^^^^^^^^^^
KeyError: 'template_paths'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
    import nbconvert;  nbconvert.RSTExporter()
                       ~~~~~~~~~~~~~~~~~~~~~^^
  File "D:\source\repos\testnbconvert\.venv\Lib\site-packages\nbconvert\exporters\templateexporter.py", line 354, in __init__
    super().__init__(config=config, **kw)
    ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
  File "D:\source\repos\testnbconvert\.venv\Lib\site-packages\nbconvert\exporters\exporter.py", line 123, in __init__
    self._init_preprocessors()
    ~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "D:\source\repos\testnbconvert\.venv\Lib\site-packages\nbconvert\exporters\templateexporter.py", line 540, in _init_preprocessors
    conf = self._get_conf()
  File "D:\source\repos\testnbconvert\.venv\Lib\site-packages\nbconvert\exporters\templateexporter.py", line 558, in _get_conf
    for path in map(Path, self.template_paths):
                          ^^^^^^^^^^^^^^^^^^^
  File "D:\source\repos\testnbconvert\.venv\Lib\site-packages\traitlets\traitlets.py", line 687, in __get__
    return t.cast(G, self.get(obj, cls))  # the G should encode the Optional
                     ~~~~~~~~^^^^^^^^^^
  File "D:\source\repos\testnbconvert\.venv\Lib\site-packages\traitlets\traitlets.py", line 635, in get
    default = obj.trait_defaults(self.name)
  File "D:\source\repos\testnbconvert\.venv\Lib\site-packages\traitlets\traitlets.py", line 1897, in trait_defaults
    return t.cast(Sentinel, self._get_trait_default_generator(names[0])(self))
                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
  File "D:\source\repos\testnbconvert\.venv\Lib\site-packages\traitlets\traitlets.py", line 1241, in __call__
    return self.func(*args, **kwargs)
           ~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "D:\source\repos\testnbconvert\.venv\Lib\site-packages\nbconvert\exporters\templateexporter.py", line 569, in _template_paths
    template_names = self.get_template_names()
  File "D:\source\repos\testnbconvert\.venv\Lib\site-packages\nbconvert\exporters\templateexporter.py", line 663, in get_template_names
    raise ValueError(msg)
ValueError: No template sub-directory with name 'rst' found in the following paths:
        D:\packages\uv\builds-v0\.tmpaUEwIS\share\jupyter
        C:\Users\jenielse\AppData\Roaming\jupyter

I originally observed this when building the docs of one of my packages using nbsphinx and using with to override another package. That package depends on ipykernel and it looks like that if I remove that dependency the issue is not opserved.

Platform

Windows 11

Version

UV 0.8.8 but can also reproduce with 0.8.0

Python version

3.11, 3.13

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workinggreat writeupA wonderful example of a quality contribution 💜

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions