Vscode-jupyter: "Run Cell" does not pickup on jupyter installed via virtualenv but conda works

Created on 14 Nov 2018  Â·  12Comments  Â·  Source: microsoft/vscode-jupyter

Environment data

  • VS Code version: 1.29.0 5f24c93878bd4bc645a4a17c620e2487b11005f9 x64

  • Extension version (available under the Extensions sidebar): 2018.10.1

  • OS and version: Ubuntu 18.04
  • Python version (& distribution if applicable, e.g. Anaconda): pipenv with python 3.7
  • Type of virtual environment used (N/A | venv | virtualenv | conda | ...): virtualenv
  • Relevant/affected Python packages and their versions: -

Actual behavior

When using a virtualenv/pipenv environment clicking on "Run Cell" yields the error msg:
Running cells requires Jupyter notebooks to be installed.

(But it works with conda.)

Expected behavior

Cell is executed.

Steps to reproduce:

mkdir hello
cd hello
pipenv --python 3.7
pipenv shell
pipenv install jupyter
which jupyter
# /home/somebody/.local/share/virtualenvs/hello-UXM3mEkX/bin/jupyter
# jupyter notebook also works on its own

Open vscode, select the interpreter for the "hello" pipenv environment, create a file demo.py with the following content:

#%%
print("hello")

Clicking on "Run Cell" yields the error msg:
Running cells requires Jupyter notebooks to be installed.

Relevant excerpt from Pipfile.lock

        "jupyter-client": {
            "version": "==5.2.3"
        },
        "jupyter-console": {
            "version": "==6.0.0"
        },
        "jupyter-core": {
            "version": "==4.4.0"
        },

Logs

Output for Python in the Output panel (View→Output, change the drop-down the upper-right of the Output panel to Python)

No output.

Output from Console under the Developer Tools panel (toggle Developer Tools on under Help)

/usr/share/code/resources/app/out/vs/workbench/workbench.main.js:294 [Extension Host] Python Extension: Error: Error executing Jupyter command 'nbconvert': [Errno 2] No such file or directory

t.log @ /usr/share/code/resources/app/out/vs/workbench/workbench.main.js:294
/usr/share/code/resources/app/out/vs/workbench/workbench.main.js:294 [Extension Host] Python Extension: Error: Running cells requires Jupyter notebooks to be installed.
t.log @ /usr/share/code/resources/app/out/vs/workbench/workbench.main.js:294
/usr/share/code/resources/app/out/vs/workbench/workbench.main.js:2429 Running cells requires Jupyter notebooks to be installed.

nbconvert is not available via the venv, but jupyter-nbconvert is.

Maybe Related

See https://github.com/Microsoft/vscode-python/issues/3341 and https://github.com/Microsoft/vscode-python/issues/3332

Most helpful comment

Update: It seem to be related to how you start vscode.

  • When vscode is started from the activated virtualenv code . then "run cell" works.
  • When vscode is started without any environment (and jupyter is not available in the current PATH)

    • "run cell" works with a conda interpreter

    • "run cell" does not work with the interpreter from the virtualenv

conda and virtualenv seem to be handled differently. Is this a bug or accepted behavior?

All 12 comments

Update: It seem to be related to how you start vscode.

  • When vscode is started from the activated virtualenv code . then "run cell" works.
  • When vscode is started without any environment (and jupyter is not available in the current PATH)

    • "run cell" works with a conda interpreter

    • "run cell" does not work with the interpreter from the virtualenv

conda and virtualenv seem to be handled differently. Is this a bug or accepted behavior?

I have the same setup as @sotte except I am on MacOS Mojave 10.14.1. But, event if I start vscode within the environment started by Pipenv, vscode is not able to find Jupyter.

The Jupyter Python Package from @DonJayamanne is able to find the Jupyter executable.

I can't repro @sotte's bug on Linux, but I can on Windows. Hopefully the fix I have out will address the problem.

@rchiodo thanks for the quick reply!

I just checked 1.30.0-insider 24b0f75b1e33b88f30f2ed9d5b17ca60062c270b x64 and I have the same experience. It was a fresh insider install with no extensions other than the python one.

@sotte Ah, your venv doesn't support nbconvert so you can't do an import. There's a bug in the code that it checks for nbconvert instead of notebook being available.

This line here:
https://github.com/Microsoft/vscode-python/blob/40554c8effdba308744ff68de24e5fd83ee84f12/src/client/datascience/history.ts#L492

That line should say:
if (!(await this.jupyterExecution.isNotebookSupported())) {

Sorry took me so long to notice you didn't have nbconvert installed in your venv.

I'll submit a fix for this right away.

@rchiodo thanks, you're great!

@sotte Were you able to take advantage of the fix? I have very similar issue (macOS 10.14.1) and I've been navigating the related issues that've been merged, but can't make out if the fix is available

Yes, it worked for me. The fix is only available through the nightly/insider build though @leonjonathan

Thanks @sotte, no luck for me though. Looks like the commit with the fix has already been pushed to Extension Version 2018.11.0, which is what I am using. After looking at microsoft/vscode-jupyter#3774 it's worth mentioning that I'm on python 3.6.7 (pyenv install) and my virtual environment is created with venv (via pyenv-virtualenv), so maybe worth opening my own issue? @rchiodo

@leonjonathan if you're using a pip venv then microsoft/vscode-jupyter#3774 is likely the culprit. If you start code from the terminal that has the environment activated, does it work then?

@rchiodo Yes, works as expected when starting code with environment activated in terminal. Not using pipenv though (as in microsoft/vscode-jupyter#3774). If I understand correctly, pipenv uses VirtualEnv, while pyenv-virtualenv uses native python3 -m venv despite its name

Was this page helpful?
0 / 5 - 0 ratings