runawaykid
runawaykid

Reputation: 1441

Cannot import modules in jupyter notebook; wrong sys.path

I am having a problem importing modules in my iPython/Jupyter notebook. The problem fundamentally lies in where the sys.path is pointing to.

From the iPython/Jupyter notebook, sys.executable returns:

'/usr/bin/python'

However, from the command line, it returns:

'//anaconda/bin/python'

I have tried un-installing and re-installing anacondas, but the problem still remains.

I have also tried augmenting $PYTHONPATH in my bash_profile to include //anaconda/bin/python, but this doesn't resolve it.

Is there anyway to change the sys.path in my jupyter notebook permanently, without simply using sys.path.append(...)?

Upvotes: 27

Views: 51564

Answers (6)

Kai-Nan Shao
Kai-Nan Shao

Reputation: 1

win11,miniconda3,virtualenv name “sitk”

just run:

conda activate sitk
conda install ipykernel
python -m ipykernel install --user --name sitk

solves the problem for SimpleITK import error in jupyter lab

Upvotes: 0

CpILL
CpILL

Reputation: 6999

I just came across this problem. did a

find ~ -name kernal.json

and got

/home/mee/dev/my-venv1/__venv__/share/jupyter/kernels/python3/kernel.json
/home/mee/dev/my-venv2/__venv__/share/jupyter/kernels/python3/kernel.json
/home/mee/.local/share/jupyter/kernels/python3/kernel.json

I looked inside ~/.local/share/jupyter/kernels/python3/kernel.json and found it was pointing to /home/alex/dev/my-venv2/__venv__/bin/python3.

I deleted ~/.local/share/jupyter/kernels/python3/kernel.json and now the one in my-venv2 is pointing to the correct one and all works as expected.

Upvotes: 0

user3521099
user3521099

Reputation:

I had the same issue. After going through many (like way too many) solutions to this issue found elsewhere, I manage to figure out a solution that at least works in my case.

Step1: check the correct executable path of the anaconda environment.

Go on command line, activate the conda environment that is problematic, and check the correct executable path for the environment.

conda activate {envronment name};
then on python console, (>>>)import sys;sys.executable

For instance on Linux it will be /media/{username}/{path-to}/anaconda3/envs/{environment name}/bin/python

Step2: correct the executable path for jupyter sessions.

From command line, check the path where kernel.json of your problematic conda environment is located.

jupyter kernelspec list

For instance on Linux it will be: /home/{username}/.local/share/jupyter/kernels/{environment name}

Open the kernel.json located in that folder and replace the incorrect executable path, as shown below.

{
 "argv": [
  "REPLACE-THIS-WITH-THE-CORRECT-EXECUTABLE-PATH",
  "-m",
  "ipykernel_launcher",
  "-f",
  "{connection_file}"
 ],
 "display_name": "environment name",
 "language": "python"
}
 

Hope this works in your case too.

Upvotes: 14

Rishabh Kumar
Rishabh Kumar

Reputation: 13

None of the above answers solved my issue. In my windows system I tried this and it worked.

conda create --name {envname}
conda install ipykernel --name {envname}
python -m ipykernel install --prefix=C:/anaconda/envs/{envname} --name {envname}
activate envname
pip install jupyter

Check sys.executable in notebook afterwords to ensure that your prefix is mentioned in the output.

Upvotes: 1

Seraph
Seraph

Reputation: 71

My system is Mac. I came across the same problem.

I use my anaconda python installed the packages but my jupyter notebook is not using it and cannot import the modules. I solved the problem by following steps:

Step1: check the actual python path you used to install the packages

I run which python and it shows the default python I use to install packages:

➜  ~ which python
/Users/my_name/opt/anaconda3/bin/python

Step2: change the jupyter kernel's python path to the above path

I run jupyter kernelspec list, it shows 2 kernels my jupyter notebook can use:

Available kernels:
  python3    /Users/my_name/Library/Jupyter/kernels/python3
  python2    /usr/local/share/jupyter/kernels/python2

Since I usually use python3 in my jupyter, then I choose to edit the first kernel's configuration, run: vi /Users/my_name/Library/Jupyter/kernels/python3/kernel.json

replace the first path as "/Users/my_name/opt/anaconda3/bin/python"(as the which python command shows.)

{
 "argv": [
  "/Users/my_name/opt/anaconda3/bin/python",
  "-m",
  "ipykernel_launcher",
  "-f",
  "{connection_file}"
 ],
 "display_name": "heterodimers",
 "language": "python"
}

save and quit the kernel.json file.

After that, my jupyter notebook can import the packages I installed in the terminal.

And thanks to Mike's answers because I basically followed his solution to find mine. The difference is that I did not use the conda environment.

Upvotes: 4

Mike Müller
Mike Müller

Reputation: 85442

  1. Open a new terminal window and see if this helps. If not, proceed with 2.

  2. Start a standard Python session from the terminal and type this:

    >>> import sys
    >>> sys.executable
    
  3. Do the same in the notebook:

    In [1]: import sys
            sys.executable
    
  4. Compare the results. Hopefully, this gives you a clue what is going on.

Upvotes: 10

Related Questions