You could try doing a more persuasive update of the packages that might be at play (e.g. in the traceback, or closely related):
pip install --update jupyterlab jupyterlab_server jupyter_server traitlets nbformat
The output of pip freeze (before and after) might help more, to be sure.
The longer story: we try to keep all the metadata lined up, and test multiple versions, but there is very little solid underneath us: pip has changed its behavior several times in the last year. If reproducing this environment is important, it pays to use something like pip-tools to capture (and check in) a definition, and virtualenv to re-install and manage them.