67
votes

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

5
This might help, allows you to choose in which environment to run your kernel in ipython: groups.google.com/a/continuum.io/forum/m/#!topic/anaconda/… - Quantum_Oli
Thank, I will look into that - tdehaeze
See my answer here: stackoverflow.com/questions/30492623/… - you probably want to use the hint with the --name argument. - cel

5 Answers

114
votes

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.

28
votes

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.

8
votes

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
5
votes

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.

1
votes

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