73

I'm trying to set a good environnement for doing some scientific stuff with python. To do so, I installed Jupyter & miniconda.

Then I want to be able to have different environnement and use them with Jupyter notebooks. So I created two custom envs with conda : py27 and py35.

> conda env list
# conda environments:
#
py27                     /Users/***/miniconda3/envs/py27
py35                     /Users/***/miniconda3/envs/py35
root                  *  /Users/***/miniconda3

Then on my notebook I have two kernels python 2 and python 3. Inside a notebook, I get the following with the python3 kernel :

> import sys
> print(sys.executable)
/Users/***/miniconda3/envs/py35/bin/python

And this with the python2 kernel :

> import sys
> print(sys.executable)
/usr/local/opt/python/bin/python2.7
  • How can I set the sys.executable to miniconda env for python2 ?
  • How can I bind a conda env with a notebook kernel ?
  • Is doing source activate py35 has a link with jupyter notebook ?

I think I really missed something.

Thank you everyone.

--- edit

I have multiple jupyter bin :

> where jupyter
/usr/local/bin/jupyter
/usr/local/bin/jupyter
/Users/ThomasDehaeze/miniconda3/bin/jupyter

I have only one kernel here /usr/local/share/jupyter/kernels/python2. But inside Jupyter, I have two kernels, python2 and python3. Where can I find the other one ?


I modified kernel.json from /usr/local/share/jupyter/kernels/python2 :

{
 "display_name": "Python 2",
 "language": "python",
 "argv": [
  "/Users/***/miniconda3/envs/py27/bin/python2.7",
  "-m",
  "ipykernel",
  "-f",
  "{connection_file}"
 ]
}

And then :

import sys
print(sys.executable)
/usr/local/opt/python/bin/python2.7

So nothing has changed

tdehaeze
  • 893
  • 1
  • 7
  • 9
  • 1
    This might help, allows you to choose in which environment to run your kernel in ipython: https://groups.google.com/a/continuum.io/forum/m/#!topic/anaconda/RuSpZVPEio8 – Quantum_Oli May 25 '16 at 10:04
  • Thank, I will look into that – tdehaeze May 25 '16 at 10:07
  • See my answer here: http://stackoverflow.com/questions/30492623/using-both-python-2-x-and-python-3-x-in-ipython-notebook - you probably want to use the hint with the `--name` argument. – cel May 25 '16 at 10:35
  • See also: https://stackoverflow.com/questions/58068818/how-to-use-jupyter-notebooks-in-a-conda-environment – lumbric Feb 27 '20 at 12:44

7 Answers7

125

For Anaconda I suggest you a much easier and proper solution; just give a look at the nb_conda_kernels package.

It allows you to "manage your conda environment-based kernels inside the Jupyter Notebook".

Is should be included since Anaconda version 4.1.0, otherwise simply use

conda install nb_conda

Now you should be able to manage all direcly from the Notebook interface.

Note that only environments that have a Jupyter kernel installed (in the case of Python, the ipykernel package). Quote from the nb_conda_kernels GitHub page:

Any other environments you wish to access in your notebooks must have an appropriate kernel package installed. For instance, to access a Python environment, it must have the ipykernel package; e.g.

conda install -n python_env ipykernel
Zoltán
  • 21,321
  • 14
  • 93
  • 134
5agado
  • 2,444
  • 2
  • 21
  • 30
  • 18
    This package works great! You just install it while an environment is activated. That environment shows up immediately in notebook's new menu selection. So you have to do this with each environment you want added to the list. – omasoud Mar 19 '17 at 06:10
  • 1
    Installing nb_conda has the disadvantage of cluttering the conda environment. Is there a workaround? – Quickbeam2k1 Nov 21 '17 at 12:56
  • 1
    @Quickbeam2k1 you only need to install it into the environment that you're running the Jupyter notebook from. This allows you to install Jupyter into the root environment and run notebooks in various other environments without having to install Jupyter in each one. – shadowtalker Jan 25 '18 at 16:35
  • Did they change something? Last time I tried this, it wasn't possible due to dependencies of nb_conda kernels with Jupyter. – Quickbeam2k1 Jan 25 '18 at 18:42
  • 6
    As I tried today(Feb 1, 2018), after installing nb_conda in root env, all envs appear in the kernel list in the Jupyter notebook file browser, no need to install nb_conda_kernels in other env. – Leo Feb 01 '18 at 12:54
  • just rechecked, still not working for me. (I'm on a Mac though) – Quickbeam2k1 Mar 02 '18 at 10:13
  • This worked for me (Mar 6, 2018). I small edit. For some reason when I did conda install nb_conda in my 'base' environment, my jupyter notebook was able to see some but not all of my conda environments. Then I activated the environment that was missing and that I wanted jupyter to see and did conda install nb_conda and now it is working completely. Not sure why but just fyi if anyone runs into similar issues. I then ran into the kernel continuously dying but that was a tornado issue – hhprogram Mar 07 '18 at 18:17
  • +1 with just a small correction to @5agado answer: These extensions are available in Anaconda v4.1 and v4.2, but you need to install them via conda for latter versions. I just installed it for Anaconda v4.4.10 (Python v3.6) and it works with no problems. – GileBrt May 07 '18 at 08:03
  • Could one have different `Jupyter` configuration file per `conda` environment? Namely `jupyter_notebook_config.py` per environment. – Royi May 25 '18 at 15:02
  • @shadowtalker thanks! I installed it on base & now works like a charm. – Faris Apr 07 '20 at 02:07
  • thx, it works for me on mac, other answers did not. – Travis Jan 10 '21 at 08:45
  • It even works for Vertex AI notebooks as well. – Ankit Seth Apr 13 '23 at 08:59
33

Assuming your conda-env is named cenv, it is as simple as :

    $ conda activate cenv
    (cenv)$ conda install ipykernel
    (cenv)$ ipython kernel install --user --name=<any_name_for_kernel>
    (cenv($ conda deactivate

If you restart your jupyter notebook/lab you will be able to see the new kernel available.

PS: If you are using virtualenv etc. the above steps hold good.

Nihal Sangeeth
  • 5,168
  • 2
  • 17
  • 32
  • 2
    That is the way I always use it. I am failing to get it to work though, when I have openjdk in the conda environment. JAVA_HOME is usually set when the env is activated. This doesn't happen when I install it as an ipython kernel. Any ideas for this scenario? – WilliamEllisWebb Jul 22 '19 at 14:36
  • Is it recommended to create a standalone conda env for ipykernel itself and install all kernels from there instead of one-env-one-ipykernel? – NeoZoom.lua Apr 02 '23 at 20:44
10

Not sure what else did help, but for me crucial was to install nb_conda_kernels in root conda environment. Attempting to install it in specific conda environment did not end up in having Jupyter Notebook be able to use other conda environment other than default one.

conda install -n root nb_conda_kernels

jupyter notebook
vedrano
  • 2,961
  • 1
  • 28
  • 25
  • 1
    Yes. I had to do this as well, although it's kinda counter-intuative, since `nb_conda` is only supposed to go inside the envs you want as kernels. – kett Mar 21 '19 at 17:41
6

I found the solution. The setup for the kernels where located here ~/Library/Jupyter/kernels/.

Then I modified the kernel.json file and set the right path to python.

Now it's working.

tdehaeze
  • 893
  • 1
  • 7
  • 9
1

This worked for me:

source activate {environment_name}
python -m ipykernel install --user --name={environment_name};

Incase ipykernel is not installed, use this command:

conda install -c anaconda ipykernel
0

What has worked for me is: creating virtual environment, install ipykernel, register the virtual environmentin the jupyter kernel and load jupyter notebook:

$ conda create -n testEnv python=3.6
$ conda activate testEnv
(testEnv)$ conda install ipykernel
(testEnv)$ ipython kernel install --user --name=testEnv
(testEnv)$ jupyter notebook

After this, in the jupyter notebook you should be able to find created environment among the list of other kernels

pari
  • 788
  • 8
  • 12
0

If you use a jupyter notebook from a docker image (e. g. jupyter/scipy-notebook), you can use mounted conda environments as a kernel.

  1. Mount conda env with:

docker run -d -v "/opt/anaconda/envs:/opt/conda/envs" -p 10000:8888 jupyter/scipy-notebook

  1. Install nb_conda_kernels in the base env from the jupyter terminal:

(base) jovyan@NUM:~$ conda install nb_conda_kernels

  1. Activate env from the mounted volume (must be created before) that should be used:

(base) jovyan@NUM:~$ conda activate useEnv

  1. Install ipykernel into useEnv:

(useEnv) jovyan@NUM:~$ conda install -c anaconda ipykernel

  1. Install the kernel

(useEnv) jovyan@NUM:~$ python -m ipykernel install --user --name=useEnv

Than you can select the newly installed kernel useEnv in a jupyter notebook.

NOTE For me, it was not that clear where the packages nb_conda_kernels and ipykernel in the accepted answer from 5agado has to be installed and if and how it works from within the dockered jupyter notebook terminal.

vielfarbig
  • 121
  • 1
  • 7