Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

jupyter notebook running kernel in different env

I've gotten myself into some kind of horrible virtualenv mess. Help?!

I manage environments with conda. Until recently, I only had a python2 jupyter notebook kernel, but I decided to drag myself kicking and screaming into the 21st century and installed a python3 kernel; I forget how I did it.

My main (anaconda) python defaults to 2.7.

So here I am, merrily trying to use beautiful soup from inside my shiny new python3 kernel, and I don't seem to be able to do anything to get at whatever environment it's finding packages in. Viz (all from notebook):

from bs4 import BeautifulSoup   -> ImportError: No module named 'bs4' 

Ok, fine, I'll install it using shell magic. Right? Right?

! pip install bs4  --> Collecting bs4   Downloading bs4-0.0.1.tar.gz Requirement already satisfied (use --upgrade to upgrade): beautifulsoup4 in /Users/[MY-USER]/anaconda/lib/python2.7/site-packages (from bs4) [...] Successfully built bs4 Installing collected packages: bs4 Successfully installed bs4-0.0.1  from bs4 import BeautifulSoup   -> ImportError: No module named 'bs4' 

Oh no. Does it think I'm in a 2.7 env even though I'm running a python3 kernel? That won't do.

! conda info --envs --> # conda environments: # flaskenv                 /Users/[MY-USER]/anaconda/envs/flaskenv mesa                     /Users/[MY-USER]/anaconda/envs/mesa py35                     /Users/[MY-USER]/anaconda/envs/py35 root                  *  /Users/[MY-USER]/anaconda 

Ok, I can fix that. One of those is a 3.5 env.

! source activate py35 --> prepending /Users/[MY-USER]/anaconda/envs/py35/bin to PATH  ! conda install beautifulsoup4 --> Fetching package metadata ....... Solving package specifications: ..........  # All requested packages already installed. # packages in environment at /Users/[MY-USER]/anaconda: # beautifulsoup4            4.4.1                    py27_0   

concerning...

! pip install bs4 --> Requirement already satisfied (use --upgrade to upgrade): bs4 in /Users/[MY-USER]/anaconda/lib/python2.7/site-packages 

more concerning...

from bs4 import BeautifulSoup   -> ImportError: No module named 'bs4' 

ARRGH!!! headdesk Am I going to have to kill the kernel in order to fix this (and re-run a bit of work)? Is killing the kernel even going to work? How do I get my jupyter kernel to know what environment it's supposed to be running under?

thanks!

like image 276
Paul Gowder Avatar asked Jun 17 '16 23:06

Paul Gowder


People also ask

How do you run a Jupyter Notebook in another environment?

To launch the notebook in a new environment deactivate that environment first. Create a conda environment and then install the ipykernel. Activate that environment. Install jupyter on that environment.

How do I change the kernel path in Jupyter Notebook?

To select the kernel in a CoCalc Jupyter notebook, click the “Kernel” button (usually in the middle toolbar, depending on your configuration). In the menu that opens, scroll down past interrupt and restart commands to see the choices for available kernels.

Can you use multiple kernels within the same Jupyter Notebook?

SoS Notebook is an extension to Jupyter Notebook that allows the use of multiple kernels in one notebook. More importantly, it allows the exchange of data among subkernels so that you can, for example, preprocess data using Bash, analyze the processed data in Python, and plot the results in R.

Do I need to install Jupyter Notebook for each environment?

Jupyter Notebook can easily be installed using conda. Our plan is to only install it in the base environment, and then just switch between sub-environments to avoid setting up Jupyter Lab in each environment.


2 Answers

This is a tricky part of ipython / Jupyter. The set of kernels available are independent of what your virtualenv is when you start jupyter Notebook. The trick is setting up the the ipykernel package in the environment you want to identify itself uniquely to jupyter. From docs on multiple ipykernels,

source activate ENVNAME pip install ipykernel python -m ipykernel install --user --name ENVNAME --display-name "Python (whatever you want to call it)" 

If you only want to have a single Python 3 kernel, from the conda environment, just use python -m ipykernel install --user and it will reset the default python to the one in the virtualenv.

And yes, you will need to restart the kernel and re-run the prior steps.

See Also Using both Python 2.x and Python 3.x in IPython Notebook

like image 160
tschundler Avatar answered Sep 23 '22 17:09

tschundler


@tschundler's solution works perfectly if your environment has already been created.

If you want to change the default kernel at the creation of your virtual environment and avoid any manual configuration, you just need to add jupyter at the end of the conda command:

conda create --name ENVNAME python=PYTHONVERSION jupyter

The correct kernel will then be used when you use ipython or jupyter notebook.

like image 42
Antoine Dusséaux Avatar answered Sep 20 '22 17:09

Antoine Dusséaux