Troubleshooting Jupyter Notebook installation with Python using pip and a venv

I’m struggling to set up and manage my Jupyter Notebook development environments.

Months ago Anaconda seemed broken so I reached out for support and was introduced to this
Stack Overflow thread
. Take note of the second paragraph in the SO question. It seems like Anaconda can become very difficult and cumbersome to troubleshoot and work with. I decided to “nuke it from orbit”. I switched to using native Linux distro package repositories. That worked for a while but I realize that is not ideal. The best practices route is to use pip and venv’s.

After creating the Python virtual environment, activating it, and then building from the requirements.txt (below), when I run $ jupyter notebook ., the jupyter kernel server begins to start and a new browser tab is opened, but it’s just a blank screen.

I spent a considerable amount of time this evening making another attempt at installing Anaconda using the official Linux distro agnostic bash script binary. After installing, when I click “Launch” below the Jupyter Notebook icon, I see a rotating loading graphic and then it just stops. It doesn’t open a new web browser tab. Effectively, nothing happens. It’s a dead end.

Below are some shell commands based on my local Python venv originally outlined above. Take note of the traceback. I’ve searched around Google without reaching anything conslusive.

What insight can you people provide based on the what you see in my traceback? What might you ppl suggest I try next? Is there any other information I could provide to help troubleshoot further?

As a bit of context - - This is for a data science Udemy course which uses Python packages such as matplotlib, seaborn, plotly, and pandas. My native local host and development environment is Manjaro Linux. No Windows / MacOS.

Traceback
(venv) <user> at <hostname> in [~/dev/projects/python/Jose-Portilla-Machine-Learning-Workbooks]  on git:main ✔︎  3e0326a "Initial commit with first Capston project COMPLETED"
$ python -m pip --version
pip 24.0 from /home/<user>/dev/projects/python/Jose-Portilla-Machine-Learning-Workbooks/venv/lib/python3.12/site-packages/pip (python 3.12)

(venv) <user> at <hostname> in  [~/dev/projects/python/Jose-Portilla-Machine-Learning-Workbooks]  on git:main ✔︎  3e0326a "Initial commit with first Capston project COMPLETED"
$ jupyter notebook .                  
[W 2024-06-02 20:26:15.401 ServerApp] ServerApp.password config is deprecated in 2.0. Use PasswordIdentityProvider.hashed_password.
[W 2024-06-02 20:26:15.601 ServerApp] nbclassic | error adding extension (enabled: True): The module 'nbclassic' could not be found (No module named 'nbclassic'). Are you sure the extension is installed?
    Traceback (most recent call last):
      File "/usr/lib/python3.12/site-packages/jupyter_server/extension/manager.py", line 323, in add_extension
        extpkg = ExtensionPackage(name=extension_name, enabled=enabled)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/usr/lib/python3.12/site-packages/jupyter_server/extension/manager.py", line 187, in __init__
        self._load_metadata()
      File "/usr/lib/python3.12/site-packages/jupyter_server/extension/manager.py", line 202, in _load_metadata
        raise ExtensionModuleNotFound(msg) from None
    jupyter_server.extension.utils.ExtensionModuleNotFound: The module 'nbclassic' could not be found (No module named 'nbclassic'). Are you sure the extension is installed?
[I 2024-06-02 20:26:15.604 ServerApp] jupyterlab | extension was successfully linked.
[W 2024-06-02 20:26:15.605 JupyterNotebookApp] 'password' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release.
[I 2024-06-02 20:26:15.606 ServerApp] notebook | extension was successfully linked.
[I 2024-06-02 20:26:15.691 ServerApp] notebook_shim | extension was successfully linked.
[I 2024-06-02 20:26:15.698 ServerApp] notebook_shim | extension was successfully loaded.
[I 2024-06-02 20:26:15.698 LabApp] JupyterLab extension loaded from /usr/lib/python3.12/site-packages/jupyterlab
[I 2024-06-02 20:26:15.698 LabApp] JupyterLab application directory is /usr/share/jupyter/lab
[I 2024-06-02 20:26:15.699 LabApp] Extension Manager is 'pypi'.
[I 2024-06-02 20:26:15.704 ServerApp] jupyterlab | extension was successfully loaded.
[I 2024-06-02 20:26:15.705 ServerApp] notebook | extension was successfully loaded.
[I 2024-06-02 20:26:15.705 ServerApp] Serving notebooks from local directory: /home/<user>/dev/projects/python/2018-and-2020/Jose-Portilla-Machine-Learning-Workbooks
[I 2024-06-02 20:26:15.706 ServerApp] Jupyter Server 2.14.0 is running at:
[I 2024-06-02 20:26:15.706 ServerApp] http://localhost:8888/tree
[I 2024-06-02 20:26:15.706 ServerApp]     http://127.0.0.1:8888/tree
[I 2024-06-02 20:26:15.706 ServerApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
Opening in existing browser session.
^C[I 2024-06-02 20:26:47.519 ServerApp] interrupted
[I 2024-06-02 20:26:47.519 ServerApp] Serving notebooks from local directory: /home/<user>/dev/projects/python/2018-and-2020/Jose-Portilla-Machine-Learning-Workbooks
    0 active kernels
    Jupyter Server 2.14.0 is running at:
    http://localhost:8888/tree
        http://127.0.0.1:8888/tree
Shut down this Jupyter server (y/[n])? y
[C 2024-06-02 20:26:48.768 ServerApp] Shutdown confirmed
[I 2024-06-02 20:26:48.770 ServerApp] Shutting down 3 extensions
requirements.txt
anyio==4.4.0
argon2-cffi==23.1.0
argon2-cffi-bindings==21.2.0
arrow==1.3.0
asttokens==2.4.1
async-lru==2.0.4
attrs==23.2.0
Babel==2.15.0
beautifulsoup4==4.12.3
bleach==6.1.0
certifi==2024.6.2
cffi==1.16.0
charset-normalizer==3.3.2
comm==0.2.2
contourpy==1.2.1
cycler==0.12.1
debugpy==1.8.1
decorator==5.1.1
defusedxml==0.7.1
executing==2.0.1
fastjsonschema==2.19.1
fonttools==4.53.0
fqdn==1.5.1
h11==0.14.0
httpcore==1.0.5
httpx==0.27.0
idna==3.7
ipykernel==6.29.4
ipython==8.25.0
isoduration==20.11.0
jedi==0.19.1
Jinja2==3.1.4
json5==0.9.25
jsonpointer==2.4
jsonschema==4.22.0
jsonschema-specifications==2023.12.1
jupyter-events==0.10.0
jupyter-lsp==2.2.5
jupyter_client==8.6.2
jupyter_core==5.7.2
jupyter_server==2.14.1
jupyter_server_terminals==0.5.3
jupyterlab==4.2.1
jupyterlab_pygments==0.3.0
jupyterlab_server==2.27.2
kiwisolver==1.4.5
MarkupSafe==2.1.5
matplotlib==3.9.0
matplotlib-inline==0.1.7
mistune==3.0.2
nbclient==0.10.0
nbconvert==7.16.4
nbformat==5.10.4
nest-asyncio==1.6.0
notebook==7.2.0
notebook_shim==0.2.4
numpy==1.26.4
overrides==7.7.0
packaging==24.0
pandas==2.2.2
pandocfilters==1.5.1
parso==0.8.4
pexpect==4.9.0
pillow==10.3.0
platformdirs==4.2.2
prometheus_client==0.20.0
prompt_toolkit==3.0.45
psutil==5.9.8
ptyprocess==0.7.0
pure-eval==0.2.2
pycparser==2.22
Pygments==2.18.0
pyparsing==3.1.2
python-dateutil==2.9.0.post0
python-json-logger==2.0.7
pytz==2024.1
PyYAML==6.0.1
pyzmq==26.0.3
referencing==0.35.1
requests==2.32.3
rfc3339-validator==0.1.4
rfc3986-validator==0.1.1
rpds-py==0.18.1
scipy==1.13.1
seaborn==0.13.2
Send2Trash==1.8.3
six==1.16.0
sniffio==1.3.1
soupsieve==2.5
stack-data==0.6.3
terminado==0.18.1
tinycss2==1.3.0
tornado==6.4
traitlets==5.14.3
types-python-dateutil==2.9.0.20240316
tzdata==2024.1
uri-template==1.3.0
urllib3==2.2.1
wcwidth==0.2.13
webcolors==1.13
webencodings==0.5.1
websocket-client==1.8.0

The output complains about missing ‘nbclassic’. Have you tried installing it?

Hi Alex. Thank you for your reply. I ran: $ pip install nbclassic. I restarted my jupyter notebook server which opened a new browser tab but the issue remains because the window is still blank. The traceback remains the same as well. Here is a screenshot demonstrating the issue but also take note that at the top you can see that nbclassic module was installed successfully.

I see this:

$ python -m pip --version
pip 24.0 from /home/<user>/dev/projects/python/Jose-Portilla-Machine-Learning-Workbooks/venv/lib/python3.12/site-packages/pip (python 3.12)

. . . which suggests pip is running in your venv. But then:

Traceback (most recent call last):
      File "/usr/lib/python3.12/site-packages/jupyter_server/extension/manager.py", line 323, in add_extension

It looks like jupyter is running in your system Python.

What happens if instead of jupyter notebook you try python -m jupyter notebook?

2 Likes

@enoren5 In general, the best way to minimize configuration issues with Jupyter and other packages would be to always develop within an isolated environment (venv or conda environment). By following these basic steps, you will reduce the likelihood of confusion:

  1. Create an isolated environment (python -m venv .venv for example)
  2. Activate the isolated environment (source .venv/bin/activate)
  3. Install the desired packages (pip install -r requirements.txt)
  4. Launch jupyter notebook or jupyterlab.

Similar steps with conda (just use their commands).

1 Like

Good eye. That’s an important distinction you’ve identified. As I mentioned in one of my earlier posts, I realize how according to best practices, I should be handling my Python packages and development environment using a virtual environment. And I have. But in my case I had Python and all my packages installed in two locations: (a) natively through my Manjaro Linux distro AUR repository as well as (b) in my venv. This is the source of my confusion.

While that is now clear, there are still some details that need to be resolved.

Next you suggested I try this:

Now that I have purged my operating system of all native Jupyter Notebook-related packages, when I do as you suggest by running: python -m jupyter notebook inside my virtual enviornment, the server starts and loads a new browser tab but the contents are still a blank white page which is right where I started.

While notebook still doesn’t work, inside my venv when I execute $ jupyter-lab ., the server starts and loads in my web browser where I can then view and use all my course content / notebooks.

I am ready to mark this thread as Resolved but I am torn between recognizing either @willingc or @BrenBarn for providing the resolution because it really was both of you equally who helped with the necessary insight. Thank you both! :slightly_smiling_face:

1 Like

A couple of more things to try as Step 4. (Awesome that jupyterlab is running).

  • Try running jupyter nbclassic instead of jupyter notebook

or

  • Try running jupyter server

Hi @willingc,

Thanks for your reply.

When I run $ jupyter server, my shell lights up with activity but no browser tab is launched although I suppose that this might be the expected behaviour with this particular command.

When I run $ jupyter nbclassic, I am able to access all the Jupyter Notebook course material as I poke around however I see the below traceback in my shell where I launch it from. Take note that this time the notebook is launching from and properly sitting inside my local virtual environemnt rather than in some /usr/lib/… system directory.

[I 2024-06-07 03:34:39.231 NotebookApp] 302 GET /nbclassic/notebooks/Pierian_Data_Logo.png (8722b1972f50439d83b198c5b0ae51ed@::1) 2.56ms
[E 2024-06-07 03:34:39.359 ServerApp] Uncaught exception GET /nbclassic/notebooks/Pierian_Data_Logo.png (::1)
    HTTPServerRequest(protocol='http', host='localhost:8979', method='GET', uri='/nbclassic/notebooks/Pierian_Data_Logo.png', version='HTTP/1.1', remote_ip='::1')
    Traceback (most recent call last):
      File "/home/<user>/dev/projects/python/2018-and-2020/Jose-Portilla-Machine-Learning-Workbooks/venv/lib/python3.12/site-packages/tornado/web.py", line 1790, in _execute
        result = await result
                 ^^^^^^^^^^^^
      File "/home/<user>/dev/projects/python/2018-and-2020/Jose-Portilla-Machine-Learning-Workbooks/venv/lib/python3.12/site-packages/tornado/gen.py", line 786, in run
        yielded = self.gen.send(value)
                  ^^^^^^^^^^^^^^^^^^^^
      File "/home/<user>/dev/projects/python/2018-and-2020/Jose-Portilla-Machine-Learning-Workbooks/venv/lib/python3.12/site-packages/nbclassic/notebook/handlers.py", line 101, in get
        self.write(self.render_template('notebook.html',
      File "/home/<user>/dev/projects/python/2018-and-2020/Jose-Portilla-Machine-Learning-Workbooks/venv/lib/python3.12/site-packages/tornado/web.py", line 914, in write
        raise RuntimeError("Cannot write() after finish()")
    RuntimeError: Cannot write() after finish()
[I 2024-06-07 03:34:39.363 ServerApp] Kernel started: c98363bd-c8ae-4324-8d31-3f944f471ca6
[I 2024-06-07 03:34:39.519 ServerApp] Connecting to kernel c98363bd-c8ae-4324-8d31-3f944f471ca6.