Description
I am on OSX Sierra (10.12.5), and am using Jupyter Notebook v 4.3.0. I have installed both Python2 and Python3 using Homebrew, and both kernels for Jupyter Notebook. Upon opening the notebook to use Python3 kernel, I find that it still uses Python2.
I might be missing something obvious in my installation, but I can't seem to figure out what it is.
Detailed Description
Installation:
I installed both Python2 and Python3 using Homebrew, and Jupyter Notebook on my system thus:
brew install python3
pip3 install --upgrade pip3 setuptools wheel
pip3 install jupyter
I ran all analogous commands for Python2 as well.
Configuration:
I generated the config file using
jupyter notebook --generate-config
, and the only configurations I have "enabled" in my config file are:
c.NotebookApp.browser = u'safari'
c.NotebookApp.password = 'sha1:somepwd'
Both kernels installed:
Both kernels seem to be visible to kernelspec:
jupyter kernelspec list
Available kernels:
python2 /usr/local/share/jupyter/kernels/python2
python3 /usr/local/share/jupyter/kernels/python3
Both kernels are also available as options when I start execute jupyter notebook
:
As an additional check, pip list
and pip3 list
both include ipykernel
.
Problem:
When I opened a new notebook using Python3 kernel, none of the packages I installed using pip3
were recognized when I used import
. Furthermore, sys.path
returns path to Python2:
When I run print "Hello World"
, it gives me a successful output (which is true in Python2, but should throw an error in Python3).
However, when I use the (depreciated) command ipython3 notebook
, things work as expected:
and all my Python3 packages are successfully recognized.
It doesn't seem to be the biggest deal breaker, as I can continue working with ipython3 notebook
, but I wonder what I am missing that causes jupyter notebook
to not load Python3.
Activity
takluyver commentedon Jun 9, 2017
Can you look at the
kernel.json
in each of those kernelspec directories you found?rjtjs commentedon Jun 9, 2017
kernel.json
inpython2
directory:kernel.json
inpython3
directory:takluyver commentedon Jun 12, 2017
This looks similar to jupyter/jupyter#270 . Ping @minrk - I think this is due to installing kernelspecs automatically as data files in the wheel.
takluyver commentedon Jun 12, 2017
For now, you can probably work around it by changing the first item in
argv
to 'python3' in the Python 3 kernel.json file.minrk commentedon Jun 12, 2017
Yup, it's the same. Running
ipython kernel install
for Python 2 and 3 will resolve the ambiguity by installing with sys.executable's abspath that we can't do in data_files. While the new data_files work better in envs of all kinds and with just one Python, two Pythons running on the same prefix (e.g. --user on linux, but not mac) run into ambiguity.rjtjs commentedon Jun 12, 2017
I didn't fully understand what @minrk said above, but running
ipython kernel install --name python3
didn't solve the issue, if that helps.As @takluyver suggested, changing
argv
solved it for me, thank you. I changed the first argument ofargv
inpython3
folder'skernel.json
frompython2
path topython3
path, and everything works as expected.chapter09 commentedon Jul 28, 2017
I got a similar problem
I solved it by
sudo pip install --upgrade ipykernel
pjpjq commentedon Aug 3, 2017
See https://stackoverflow.com/a/37857536/5658349
nvdv commentedon Sep 19, 2017
Solved this issue by executing
cbcoutinho commentedon Jan 8, 2018
I also am experiencing this issue, and editing the two
kernel.json
files has solved the problem. Will I have to do this every time I upgradejupyter
on my machine?takluyver commentedon Jan 8, 2018
Hopefully not. We've refined this behaviour in a new version of
jupyter_client
actongorton commentedon Jan 19, 2018
This is also happening to me. Using
ipython3 notebook
works.25 remaining items
mathieuboudreau commentedon Jul 21, 2020
I was on vacation last week. If I recall, it was working correctly before then, and isn't working now. I don't think made any upgrades, but I could try and delete anaconda and reinstall it.
JanGieseler commentedon Aug 31, 2020
I got the same issue!
For some reason the environment is not activated in jupyter notebook. If I activate the environment in the terminal
conda activate myenv
and runecho $PATH
, I get/Users/$USER/anaconda3/envs/myenv/bin
.However, when I start the jupyter notebook and run
!echo $PATH
, I get/Users/$USER/anaconda3/bin
.Therefore, also if I run
which python
in the terminal I get the python version from the environment but if I run it in the notebook I get the default python.This is on Mac Catalina.
kevin-bates commentedon Aug 31, 2020
You might find something helpful here and in the referenced links.
KoenBal commentedon Jan 3, 2021
Tested everything on https://ipython.readthedocs.io/en/stable/install/kernel_install.html#kernels-for-different-environments still having the same issue as @nicholas-miles
elexira commentedon Jan 15, 2021
for the love of GOD, somebody please address this issue, none of the solutions work, and many have the same issue where changing the kernel does not point the python to the correct kernel environment. For me it always point into the same environment from which i ran the initial jupyter-notebook. I am stuck to that environment python, cannot change the kernel to any other one.
Within jupyter if i run this:
it points to the correct python environment and changes as expected, but
which python
inside the same damn jupyter notebook always point to the one directory even when i change the kernel.
kevin-bates commentedon Jan 15, 2021
It seems like the crux of the issue is that the correct python is in use by the kernel, but the PATH (from the kernel) doesn't reflect the python in use. As a result, while python statements (e.g.,
import foo
) produce the desire results, any shell commands (e.g.,!pip install foo
) do not. In such cases, you could fully-qualify the shell command and, I believe, get the desire results.I found the IPython's documentation link in the Python Environments section of the troubleshooting documentation to be fairly helpful. In particular the portion about installing the kernel with the
--prefix
option to point at an env different that the current env.Jupyter, by default, doesn't activate environments for a given kernel. This is why the PATH-based commands (sans prefixing) can be problematic. If you find that activation may resolve things for you, then perhaps taking a look at nb_conda_kernels may be helpful. This package updates your jupyter's configuration to use an alternate
KernelSpecManager
that is used for discovering kernels (which some find invasive). These kernel specifications contain information that, AFAIK, activate the environment associated with that kernel prior to its launch.Here's a screenshot of a kernel I've started that uses a python from an environment other than the notebook server. The notebook server is launched in my activated
notebook-dev
env, while the kernel I want to run is in myenterprise-gateway-dev
env. Aside from the PATH and sys.executable difference, you'll find that theimport
statement produces the desired result (my notebook-dev env doesn't have kubernetes installed). In addition, my EG env doesn't havenose
installed until I fully qualify thepip
command to install it into the kernel's env (i.e., enterprise-gateway-dev).I hope you find this helpful and apologize for the frustration.
yasirroni commentedon Mar 1, 2021
I found this exact behavior when trying having
jupyterlab
to manage multipleenv
.kernel.json
, each pointing differentenv
.import
behave exacty as expected, only import from the pointedenv
!system
command including!pip install
andpython3 --version
will only point to the main kernel (in my case, default ubuntu python 3.8)Is there any work around to install package diractly to
env
without leavingjupyterlab
?kevin-bates commentedon Mar 1, 2021
Hi @yasirroni - try using the
%pip
magic. This is exactly the problem it resolves.himanshu-irl commentedon Mar 9, 2021
ipython kernel install --user
worked for mejianboy commentedon Apr 19, 2021
What do I need to do to install dependency?
run pip install pandas, it installed to /usr/bin/python2 instead of /opt/python3.9
murata100 commentedon Jun 7, 2022
@jianboy I solved it with this
You may need to restart the kernel
nemusa commentedon Aug 16, 2022
The problem with
which python
inside notebook not pointing to the same assys.executable
is caused by a difference in system paths. In order to make sure they are pointing to the same executable:python -m ...
--env PATH=...
For my setup with virtualenv it looks like this
In general:
aeciorc commentedon Dec 29, 2022
@nemusa Thank you so much, this worked for me! It was driving me crazy that I couldn't figure out why the PATH inside the shell didn't match my $PATH
GregHilston commentedon Sep 27, 2023
@nemusa 's approach was the only thing that worked for me running the
jupyter/minimal-notebook
docker contaner